PHP脚本没有收到发布的JSON

时间:2014-11-11 14:00:02

标签: javascript ajax

我在使用以下JavaScript时出现问题,其中数据是JavaScript对象:

var ajax_send = function(data) {
        var httpRequest;

        makeRequest('/prototype/test.php', data);

        function makeRequest(url, data) {
            if (window.XMLHttpRequest) {
                httpRequest = new XMLHttpRequest();
            } else if (window.ActiveXObject) {
                try {
                    httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
                } 
                catch (e) {
                    try {
                        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                    } 
                    catch (e) {}
                }
            }

            if (!httpRequest) {
                alert('Giving up :( Cannot create an XMLHTTP instance');
                return false;
            }

            httpRequest.onreadystatechange = alertContents;
            httpRequest.open('POST', url);
            httpRequest.setRequestHeader('Content-Type', 'application/json');
            httpRequest.send(JSON.stringify(data));
        }

        function alertContents() {
            if (httpRequest.readyState === 4) {
                if (httpRequest.status === 200) {
                    alert(httpRequest.responseText);
                } else {
                    alert('There was a problem with the request.');
                }
            }
        }
    };

PHP是:

$data = $_POST['data'];
$obj = json_decode($data);
echo $obj;

在开发工具中,请求有效负载看起来确定,但它似乎不是PHP正在寻找的东西。什么都没有通过PHP脚本,响应是空的。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

使用Content-Type: application/json发送POST请求时,PHP的工作方式会有所不同。

您将需要像这样访问它:

$postData = json_decode(file_get_contents('php://input'));

而不是通常的$_POST

如果您想将其作为常规表单发送到$_POST,则需要设置标题:

httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

并填充你的字段:

key=value&key2=value2&key3=value3