说明
我在PHP中有以下代码,允许用户从下拉列表中选择一个名称,然后将该名称作为字符串传递给JavaScript函数:
<?php
include('./db.php');
$PM = mysqli_query($con, "SELECT DISTINCT PMName FROM report WHERE PMname <> '' ORDER BY PMName ASC");
?>
<select class="navbar-inverse" placeholder="PM Name" name="PMName" onchange="showUser(this.value)">
<?php
while ($row = mysqli_fetch_row($PM)) {
$selected = array_key_exists('PMName', $_POST) && $_POST['PMName'] == $row[0] ? ' selected' : '';
printf(" <option value='%s' %s>%s</option>'n", $row[0], $selected, $row[0]);
}
?>
然后JavaScript函数读取字符串:
function showUser(str) {
if (str !==".PM") {
if (str=="") {
document.getElementById("txtHint").innerHTML="";
return;
}
}
$("#txtHint").load( "getuser.php?q="+str );
console.log(str);
}
并且应该将getuser.php?q=John%Doe
的输出放入txtHintDIV.
问题
str值似乎未完全传递到$("#txtHint").load( "getuser.php?q="+str );
代码行。
当我查看控制台时,一旦JavaScript函数启动,我会看到以下内容:
HR finished loading: GET "http://localhost/getuser.php?q=John"
John Doe
如果我将代码更改为只读取$("#txtHint").load( "getuser.php?q=");
(不传递str
变量),它会很好地工作,并将getuser.php页面加载到DIV中(当然,如果没有名称,我不会返回任何信息,但它会工作…)
我在这里做错了什么?如果console.log(str)
输出John Doe
,那么显然整个字符串都是John Doe
,那么为什么我的控制台输出?q=John
呢?并导致getuser.php无法加载到DIV?
我在这里很困惑。。。。
如果要将字符串作为查询变量发送,则需要对其进行编码:
$("#txtHint").load( "getuser.php?q="+encodeURIComponent(str));