JQuery.ajax和对象和PHP的空响应

时间:2015-03-12 13:58:12

标签: php jquery ajax json

我因为ajax响应创建了我的第一个通用代码而陷入困境。我只是在这里得不到输出,既不是在php中也不是在ajax响应中。这必须包含在帖子数据中。

这是我的ajax请求:

        var info = {};
        //get id info
        info["ses-id"] = $("#theme").attr("scene");
        //get template info
        info["ses-template"] = $("#theme").attr("template");

        $.ajax({
            dataType: "json",
            contentType: "application/json; charset=UTF-8",
            data: JSON.stringify(info),
            type: "POST",
            url: "query.php"
        }).done(function(data, textStatus, jqXHR) {
            alert (data);
            //window.location = "?szenen";
            console.log("Data sent.");
        }).fail(function(jqXHR, textStatus, errorThrown) {
            console.log("There was an error." + errorThrown);
        });

到目前为止,这是我的query.php:

    <?php 
        $return = $_POST;
        $return["json"] = json_encode($return);
        print(json_encode($return));

输出是一个对象,其中只有json条目用[]填充。

stringified变量看起来不错,它是这样的字符串:

    {"ses-id":"1","ses-template":"2"}

感谢您的任何建议!

3 个答案:

答案 0 :(得分:1)

您的问题是您正在发送一个json编码的字符串作为POST正文,然后使用$ _POST来访问它。 $ _POST是键/值POST数据的数组。由于您的数据没有密钥,因此您无法从$ _POST数组访问它。它只是一个值(字符串值)。

如果您将PHP脚本更改为:

<?php
echo file_get_contents("php://input");
?>

它将输出您传入的JSON。请注意,不需要执行json_encode(),因为该值是字符串,而不是数组。你通过它的json从未解码过。

或者,如果你的javascript是:

$.ajax({
    data: { "data": JSON.stringify(info) },
    type: "POST",
    url: "query.php"
})

那么你的帖子就是:

data={"ses-id":"1","ses-template":"2"}
然后你可以做

<?php
echo $_POST["data"];
?>

再次注意到您发送的数据从未被解码过,因此它仍然只是一个字符串。 PHP没有json_decode给你。

答案 1 :(得分:0)

当你删除contentType和JSON.stringify:

时,它会起作用
    var info = {};
    //get id info
    info["ses-id"] = $("#theme").attr("scene");
    //get template info
    info["ses-template"] = $("#theme").attr("template");

    $.ajax({
        dataType: "json",
        data: info,
        type: "POST",
        url: "query.php"
    }).done(function(data, textStatus, jqXHR) {
       console.log(data);
        //window.location = "?szenen";
        console.log("Data sent.");
    }).fail(function(jqXHR, textStatus, errorThrown) {
        console.log("There was an error." + errorThrown);
    });

答案 2 :(得分:0)

必须停用dataType和contentType,然后我才得到回复。

    $.ajax({
        //dataType: "json",
        //contentType: "application/json; charset=UTF-8",
        data: JSON.stringify(info),
        type: "POST",
        url: "query.php"

改变信息对象会导致php var的变化,但这不是我的问题。

非常感谢大家特别CJ_Wurtz以正确的方式推动我。