通过AJAX将JavaScript变量传递给PHP

时间:2014-10-23 19:25:04

标签: javascript php jquery ajax

我正在关注http://www.w3schools.com/php/php_ajax_database.asp的指南,我得到了它如何运作的基本概念。

我的代码:

PHP:

<?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]);
}
?>
</select>
<div id="txtHint"><b></b></div>

的JavaScript:

<script>
    function showUser(str) {
      if (str !==".PM") {
        alert(str);
        if (str=="") {
          document.getElementById("txtHint").innerHTML="";
          return;
        } 
        if (window.XMLHttpRequest) {
          // code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
        } else { // code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function() {
          if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
          }
        }
      }
      xmlhttp.open("GET","getuser.php?q="+str,true);
      xmlhttp.send();
    }
</script>

和getuser.php页面:

<?php
$q = intval($_GET['q']);
include('./db.php');
$sqlPM= "SELECT * FROM report WHERE PMName = '".$q."'";
$result     = mysqli_query($con, $sqlPM);
?>

<table>
<?php
echo $q ;
?>
</table>

我在这里阅读了大约12篇帖子,并尝试理解其中大多数使用某种形式的$.post('getuser.php'将变量发送到新的PHP页面的事实,但w3schools的示例没有做这个。在初始页面上,我的下拉列表正在从我的数据库中填充,我选择的值将被传递到JavaScript函数中。我用alert(str);检查这个,但是从那里开始,它似乎永远不会到达第二个PHP页面。我尝试使用echo $q ;进行测试,结果显示为空。

我做错了什么导致JavaScript函数捕获的变量不会传递到第二个PHP页面?

从我所看到的情况来看,我正按照本教程中的说明进行操作。

1 个答案:

答案 0 :(得分:1)

$.post('getuser.php'此语法专用于名为jQuery的JavaScript库。此外,考虑到您最初执行的数据库查询,$q不是integer它是string,那么为什么要将$_GET['q']intval()包裹在一起?