26

我使用以下函数通过 jQuery AJAX 发布表单:

$('form#add_systemgoal .error').remove();
var formdata = $('form#add_systemgoal').serialize();
$.ajaxSetup({async: false});  
$.ajax({     
    type: "POST",
    url: '/admin/systemgoalssystemgoalupdate?format=html',
    data: formdata,
    success: function (data) {
        console.log(data);   
    },
});

它发布得很好,但我无法解析响应,它记录到控制台如下

{
    "success": 1,
    "inserted": {
        "goal_id": "67",
        "goalsoptions_id": "0",
        "user_id": "0",
        "value": "dsfdsaf",
        "created": "2013-06-05 09:57:38",
        "modified": null,
        "due": "2013-06-17 00:00:00",
        "status": "active",
        "actions_total": "0",
        "actions_title": "sfdgsfdgdf",
        "action_type": "input",
        "points_per_action": "1",
        "expires": "2013-06-11 00:00:00",
        "success": 1
    }
}

我相信这是我正在寻找的回应。

但是,当我尝试做alert(data.success);或响应对象的任何其他成员时,它是undefined.

任何建议表示赞赏。

4

6 回答 6

21

打电话

var parsed_data = JSON.parse(data);

应该能够像你想要的那样访问数据。

console.log(parsed_data.success);

现在应该显示“1”

于 2013-06-05T09:05:41.220 回答
16
 $.ajax({     
     type: "POST",
     url: '/admin/systemgoalssystemgoalupdate?format=html',
     data: formdata,
     success: function (data) {
         console.log(data);
     },
     dataType: "json"
 });
于 2013-06-05T09:06:20.460 回答
6

想象一下这是你的 Json 响应

{"Visit":{"VisitId":8,"Description":"visit8"}}

这是您解析响应和访问值的方式

    Ext.Ajax.request({
    headers: {
        'Content-Type': 'application/json'
    },
    url: 'api/fullvisit/getfullvisit/' + visitId,
    method: 'GET',
    dataType: 'json',
    success: function (response, request) {
        obj = JSON.parse(response.responseText);
        alert(obj.Visit.VisitId);
    }
});

这将提醒 VisitId 字段

于 2015-07-24T16:20:14.043 回答
4

您必须解析 JSON 字符串才能成为对象

var dataObject = jQuery.parseJSON(data);

所以你可以这样称呼它:

success: function (data) {
    var dataObject = jQuery.parseJSON(data);
    if (dataObject.success == 1) {
       var insertedGoalId = dataObject.inserted.goal_id;
       ...
       ...
    }
}
于 2013-06-05T09:09:03.223 回答
2

由于您使用的是$.ajax,而不是$.getJSON,因此您的返回类型是纯文本。您现在需要转换data为 JSON 对象。

您可以通过更改$.ajaxto 来做到这一点$.getJSON(这是 的简写$.ajax,仅预配置为获取 json)。

data或者您可以在收到字符串后将其解析为 JSON,如下所示:

    success: function (data) {
         var obj = $.parseJSON(data);
         console.log(obj);
    },
于 2013-06-05T09:07:50.057 回答
0

使用parseJSON. 看文档

var obj = $.parseJSON(data);

像这样的东西:

$.ajax({     
    type: "POST",
    url: '/admin/systemgoalssystemgoalupdate?format=html',
    data: formdata,
    success: function (data) {

        console.log($.parseJSON(data)); //will log Object

    }
});
于 2013-06-05T09:06:08.093 回答