【问题标题】:Returned JSON is seemingly mixed up when using jQuery Ajax使用 jQuery Ajax 时返回的 JSON 似乎混淆了
【发布时间】:2012-10-14 15:29:17
【问题描述】:

我有一个包含以下行的 php 脚本:

echo json_encode(array('success'=>'true','userid'=>$userid, 'data' => $array));

它返回以下内容:

{
"success": "true",
"userid": "1",
"data": [
    {
        "id": "1",
        "name": "Trigger",
        "image": "",
        "subtitle": "",
        "description": "",
        "range1": null,
        "range2": null,
        "range3": null
    },
    {
        "id": "2",
        "name": "DWS",
        "image": "",
        "subtitle": "",
        "description": "",
        "range1": null,
        "range2": null,
        "range3": null
    }
]

}

但是当我如下调用 jQuery ajax 时:

$.ajax({
    type: 'POST',
    url: 'url',
    crossDomain: true,
    data: {name: name},
    success: function(success, userid, data) {

      if (success = true) {
         document.write(userid);
         document.write(success);
       }
   }
});

userid 是“成功”。实际的success 一个有效,它的true

是否返回了格式错误的数据?还是只是我的代码?

提前致谢, 尼尔

【问题讨论】:

  • 其他问题 - success = true。您可能指的是success == true,但它应该只是success。这就是为什么你从不写== true,顺便说一句。
  • 抱歉,我在输入问题时打错字了

标签: php jquery ajax json api


【解决方案1】:

成功回调采用的参数在documentation 中定义:

success(data, textStatus, jqXHR)

响应在作为参数传递给它之前不会被拆分。您必须从第一个参数中提取值。

您还需要在 PHP 中添加 header('Content-Type: application/json'),以便 jQuery 在填充第一个参数时将响应解析为 JSON 而不是 HTML。

然后您可以测试data.success 并访问data.userid(以及data.data,这将是分配给返回数据中data 属性的数组……您可能需要重命名它以避免混淆)。

请注意,当您测试它时,您需要使用===(或==),而不是您目前使用的* assignment* 运算符。另请注意,您的 JSON 响应返回的是 string "true" 而不是布尔值 true

【讨论】:

    【解决方案2】:

    您不能在Success 中添加自己的参数。像这样更改您的代码,

    success: function(response) {
    
          if (response.success == true) { 
             document.write(response.userid);
             document.write(response.success);
           }
       }
    

    根据success()的jQuery Docs,

    成功(数据、文本状态、jqXHR)

    请求成功时调用的函数。该函数获得三个参数: 从服务器返回的数据,根据 dataType 参数格式化;描述状态的字符串;和 jqXHR(在 jQuery 1.4.x 中,XMLHttpRequest)对象。从 jQuery 1.5 开始,success 设置可以接受一个函数数组。每个函数都会被依次调用。

    http://api.jquery.com/jQuery.ajax/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-27
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多