我看过这个论坛上的很多帖子,但仍然遇到问题,无法理解它。
我正在通过发布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']
答案 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(如果是,则不会对传递的对象进行递归序列化)