【问题标题】:understanding about returing two object lists by json_encode when one object list is already in json format了解当一个对象列表已经是 json 格式时,通过 json_encode 返回两个对象列表
【发布时间】:2014-06-05 18:13:06
【问题描述】:

我正在使用 ajax 获取帖子的 facebook cmets,因此以下 php 函数代码通过 json 编码将数据返回到 ajax 调用。

echo json_encode(array($JsonData,$arr2));
die(); 

但是 $JsonData 中的内容已经是 json 格式,因为我正在使用该 php 函数中的服务器端图形 api 调用获取 Facebook 帖子的这些 cmets 数据,并在回显之前首先分配给 $JsonData。

但是在 ajax 成功函数上我没有得到数据。

success:function (data, textStatus, XMLHttpRequest) {
               var comments=data[0].data;
                   alert(comments);   //shows something undefined

(当我单独以这种方式获取数据时,我只在 php 函数中以这种方式返回 cmets 数据回显 $JsonData; 并在成功函数 cmets=data.data 中返回)

所以现在我必须通过 ajax 调用获取另一个数组 $arr2,所以返回的数据 json_encode(array($JsonData,$arr2)) 不起作用。由于 $JsonData 已经是 json 格式,所以在服务器端进行 json 编码可能会导致问题。

但是如果我使用 jquery json 解析如下 jQuery.parseJSON(data[0]);然后我遇到了 cmets=jQuery.parseJSON(data[0]).data.

考虑到如果 parseJson 不适用于所有 jquery 版本,当 $JsonData 已经是 json 格式并让事情在成功函数中工作时,我还有什么其他方法可以避免在服务器端返回代码中的 json_encode 耗时调用。仅供参考,我使用了“json”作为 ajax 调用中的数据类型。

【问题讨论】:

    标签: javascript php jquery json


    【解决方案1】:

    一种方法是在与其他数据结合之前先解码 json:

    echo json_encode(array(json_decode($JsonData),$arr2));

    甚至可以像这样构建自己的 json:

    echo '[' . $JsonData . ',' . json_encode($arr2) . ']';

    这将回显一个包含 2 个对象的数组。

    【讨论】:

    • 嗯,我会在离线后尽快尝试第二个选项。无论哪种方式似乎都无法避免编码和解码,您不认为这些功能会增加处理时间吗?
    • 是的,它确实增加了处理时间。从您的代码中,我猜 $arr2 是一个数组。因此,必须先对其进行编码。还是我错了?
    • 是的,它是数组,但可以是关联数组。但是关于 parsejson,jquery 版本是否支持 > 1.4
    • 我想你现在问的是客户端 javascript 代码。如果你将 jQuery ajax dataType 选项设置为“json”,data 将在你的成功函数中自动解析为 JSON。解析失败,会调用error回调函数而不是成功。
    猜你喜欢
    • 1970-01-01
    • 2021-03-01
    • 2015-04-18
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2016-03-02
    • 2016-12-16
    相关资源
    最近更新 更多