post变量没有传递给php

时间:2015-07-06 08:02:57

标签: php html ajax http post

我试图通过AJAX调用发送一个POST变量,似乎php脚本没有收到它。这是我的html文件

<!doctype html>
<html>
<head>
    <title>Testing</title>
</head>
<body>
    <h1 id="test">Testing</h1>
    <input type="text" id="search" placeholder="search"/>
    <div id="target">
    </div>
<script type="text/javascript">
function ajax_call(){
    var hr=new XMLHttpRequest();
    var target=document.getElementById("target");
    hr.open("POST", "phptest.php", true);
    hr.setRequestHeader("Content-Type"," application/x-www-form-urlencoded");
    hr.onreadystatechange=function(){
        if(hr.readyState==4 && hr.status==200){
            var data=(hr.responseText);
            target.innerHTML="";
            target.innerHTML+=data;

        }
    }
    hr.send("test="+document.getElementById("test").innerHTML);
}
ajax_call();
</script>
<!-- <script type="text/javascript" src="Scripts/friends2.js"></script> -->
</body>
</html>

这是PHP文件: -

<?php
header("Content-Type: application/json");
//$search=$_POST['search'];
/*if(empty($_POST)){
    echo "not set";
}*/

echo $_POST['test'];
?>

我删除了JSON解析,当我取消注释if(empty ..)行时,我看到“未设置”

2 个答案:

答案 0 :(得分:2)

似乎没有什么问题

  1. 在setRequestHeader上(需要2个争论,但在示例代码中只给出了一个)

    hr.setRequestHeader( “内容类型”, “应用程序/ x WWW的形式进行了urlencoded”);

  2. 您的PHP代码需要返回json格式,例如

    echo'{“message”:“'。$ _ POST ['test']。'”}';

  3. 您的页面需要从解析的json中获取值(请注意php代码中的'message')

    target.innerHTML + = data.message;

答案 1 :(得分:1)

您需要将内容类型修改为正确的格式

<!doctype html>
<html>
<head>
    <title>Testing</title>
</head>
<body>
    <h1 id="test">Testing</h1>
    <input type="text" id="search" placeholder="search"/>
    <div id="target">
    </div>
<script type="text/javascript">
function ajax_call(){
    var params = "test="+document.getElementById("test").innerHTML;
    console.log(params);
    var hr=new XMLHttpRequest();
    var target=document.getElementById("target");
    hr.open("POST", "phptest.php", true);
    hr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    hr.onreadystatechange=function(){
        if(hr.readyState==4 && hr.status==200){
            var data=hr.responseText;
            target.innerHTML="";
            target.innerHTML+=data;

        }
    }
    hr.send(params);
}
ajax_call();
</script>
<!-- <script type="text/javascript" src="Scripts/friends2.js"></script> -->
</body>
</html>

您可能希望删除JSON.parse(),以便可以在PHP端看到您可能正在进行的任何调试,否则您需要更改PHP以恢复JSON字符串。

检查浏览器的开发者控制台以检查PHP脚本的输出。