0

我有一个具有以下行的 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.

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

在此先感谢,尼尔

4

2 回答 2

3

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

success(data, textStatus, jqXHR)

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

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

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

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

于 2012-10-14T15:32:49.657 回答
1

您不能在Success. 像这样更改您的代码,

success: function(response) {

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

根据 jQuery Docs success()

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

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

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

于 2012-10-14T15:35:05.820 回答