传递字符串时,AJAX查询不起作用

时间:2014-10-30 21:05:55

标签: javascript php jquery ajax

说明

我在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 的输出放入 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中?

我在这里很困惑....

1 个答案:

答案 0 :(得分:3)

如果要将字符串作为查询变量发送,则需要对字符串进行编码:

$("#txtHint").load( "getuser.php?q="+encodeURIComponent(str));