苦苦挣扎json_decode

时间:2011-02-03 14:44:30

标签: php jquery json

我看过这个论坛上的很多帖子,但仍然遇到问题,无法理解它。

我正在通过发布json对象的ajax检索一个php页面:

$.ajax({
    url: myUrl,
    data: sendData,
    type: "POST",
    error: function(xhr, statusText, errorThrown){
    // Work out what the error was and display the appropriate message
    },
    success: function(data){
    // data retrived ok
    var myData = data;
        // do something with data
    }
});

我的json是这样的(用js生成):

{"borough": {"id": "3"}, "cat":{"id": "5", "id": "47", "id": "98"}}

使用萤火虫我已经痊愈并且越过了

我的问题是php,我似乎无法获取数据json_decoded。

<?php
    $catPost = $_POST['cat'];
    echo($catPost);
    $catData = json_decode($catPost, true);
    var_dump($catData);
?>

echo语句打印出[object Object]

但var_dump打印出null

我在做错了什么?我如何访问数据????

中的diffirent“id”值

任何帮助都非常感激。

可以在http://http://www.reelfilmlocations.co.uk/NEW Search/fullsearch_jq.php

看到测试页

测试说明: (使用选择类别下拉列表下的“高级搜索”文本执行ajax调用 同时选择一个自治市镇和某些类别用一些数据填充json对象

编辑:

json由以下脚本创建,该脚本从数组中读取所选择的tages的值:

var sendData = {"borough":[], "cat":[]};
//alert('borough tagger add '+BoroughTagger.myIdArray[intIndex]);
sendData.borough.push({"id":BoroughTagger.myIdArray[intIndex]});
$.each(CatTagger.myIdArray, function(intIndex, objValue) {
    alert('cat Tagger add '+CatTagger.myIdArray[intIndex]);
    sendData.cat.push({"id":CatTagger.myIdArray[intIndex]});
});

将创建一个如下所示的json对象:(在fiebug中检查过)

{"borough": {"id": "3"}, "cat":{"id": "5", "id": "47", "id": "98"}}

我现在使用stringData = JSON.stringify(sendData)通过ajax发送数据 但是在post集合中似乎有任何名称,字符串就在那里,但如果我使用$myData = $_POST;引用它,其中echos“ArrayArray” json_decode错误:警告:json_decode()期望参数1为字符串,数组在第7行的D:\ wamp \ www \ ReelFilm \ NEW Search \ getAdvSearch.php中给出

那么如何获取ajax调用为已发送的sata分配名称,以便我可以使用$_POST['myData']

访问它

3 个答案:

答案 0 :(得分:2)

如果json_decode()给出null,请使用json_last_error()尝试确定失败的原因。

答案 1 :(得分:1)

我找到了解决问题的方法。试试这个。

可能是因为您正在使用jQuery,他们可能以不同的方式发布它以使PHP将其识别为对象。我知道你已经在json_decode()中完成了它,但echo()输出只将变量识别为一个对象,因此你需要强制PHP将其更改为数组。

<?php
    $catPost = (array) $_POST['cat']; /* PHP may post it as an object, this converts to array, which you'll need to find the data from */
    echo($catPost);
    $catData = json_decode($catPost, true);
    var_dump($catData);
?>

如果这不起作用,则在将jQuery ajax()数据推送到服务器之前,先对其进行编码。您可以在phpjs.org的phpjs.org上找到base64_encode函数,然后只需对您的字符串进行编码,然后使用PHP base64_decode()来解码输出,然后使用json_encode()。

希望它有所帮助!

答案 2 :(得分:1)

尝试将此选项添加到您的ajax-call:

traditional:false

看起来像某种方式将ajaxSetup的传统选项设置为true(如果是,则不会对传递的对象进行递归序列化)