1

好的。经过大约一个小时的尝试想不同的方法来做到这一点,我的菜鸟占了上风(这个问题将证明这一点)。

我有一个如下所示的 JSON 对象:

{
    newEvent: {
        Event: {
            name: "Something",
            timestamp: {
                month: "07",
                day: "27",
                year: "2013",
                hour: "07",
                min: "42",
                meridian: "pm"
            },
            duration: "2",
            durationMeasure: "min"
        }
    },
    msg: "Event Added"
}

它在 jquery ajax 完整回调函数中返回,因此它位于一个名为data.
使用 Chrome,我可以console.log() data, data.newEvent, data.msg, data['newEvent'], 和data['msg']. 唯一返回未定义以外的任何内容data的是(打印上面的内容)

我的问题:我在世界上如何得到任何东西data?!任何对 JavaScript 菜鸟的见解将不胜感激!=)

编辑:代码片段:

function eventAdditionalFinish(data,textStatus) {
    console.log("data: ",data,"\n");
    console.log("data['newEvent']: ",data['newEvent'],"\n");
    console.log("data['msg']: ",data['msg'],"\n");

    console.log("data.newEvent: ",data.newEvent,"\n");
    console.log("data.msg: ",data.msg,"\n");
}

Chrome 控制台的输出:

data:  {"newEvent":{"Event":{"name":"Something","timestamp":{"month":"07","day":"27","year":"2013","hour":"07","min":"42","meridian":"pm"},"duration":"2","durationMeasure":"min"}},"msg":"Event Added"}
data['newEvent']:  undefined 
data['msg']:  undefined 
data.newEvent:  undefined 
data.msg:  undefined 
4

3 回答 3

1

好的,

如果你使用 jQuery 的json()函数代替ajax(),它会将响应解析为一个 json 对象。

但是,如果您使用股票函数并将结果作为调用的字符串获取,data那么您需要类似这样的东西将其转换为对象......

response = JSON.parse(data);

然后你可以做...

response.newEvent.blah;

如您所料。

请注意,您的示例实际上不是有效的 json。应引用属性名称...

{
    "newEvent": {
        "Event": {
            "name": "Something",
            "timestamp": {
                "month": "07",
                ...

正如其他人指出的那样,您还可以通过指定数据类型来告诉ajax()将结果转换为您的对象(就像您调用了一样)...json()

$.ajax({
     ...
     dataType: 'json',
     success: function(data) {
         alert(data.newEvent.Event.name);   
     }
});
于 2013-07-28T00:21:06.553 回答
1

我想这是因为您从服务器收到了一个字符串。所以有两个选择:

  • dataType: 'json'在您的 ajax 参数中指定。
  • JSON.parse(data)在尝试访问元素之前使用
于 2013-07-28T00:21:40.893 回答
0

下面的符号应该可以工作,只是用一个类似的例子进行了测试

$.ajax({
         url:    'yoururl',
         success: function(data) {
             alert(data.newEvent.Event.name);   
         },
         async:   false
    });

在这种情况下,您将作为数据变量获得的是具有属性的对象。要访问属性,请写入:ObjectsName.attributeName

如果有属性也是包含属性的对象,则可以像这样访问这些属性: ObjectsName.attributeName1.attrubteName2 (其中 attribute1 也是包含属性的对象)

如果我在这里错了,请纠正我,我也是 javascript/jquery-ajax 的新手,但我昨天遇到了同样的问题:)

于 2013-07-28T00:19:34.217 回答