传递字符串时,AJAX查询无法正常工作

说明

我在PHP中有以下代码,允许用户从下拉列表中选择一个名称,然后将该名称作为字符串传递给JavaScript函数:

<?php include('./db.php'); $PM = mysqli_query($con, "SELECT DISTINCT PMName FROM report WHERE PMname  '' ORDER BY PMName ASC"); ?>  <?php while ($row = mysqli_fetch_row($PM)) { $selected = array_key_exists('PMName', $_POST) && $_POST['PMName'] == $row[0] ? ' selected' : ''; printf(" %s\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的输出放入txtHint DIV中。

问题

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));