1

我有一些有效的 JSON 如下

[
    {
        "userFullName": "Tim, Bill",
        "id": "LOt3",
        "organisation": "FAP",
        "loginSystem": "A",
        "userId": 0
    },
    {
        "userFullName": "Bruce, David",
        "id": "LNA",
        "organisation": "ES",
        "loginSystem": "A",
        "userId": 0
    }
]

我试图在 AJAX 调用成功时访问 JSON 元素,如下所示:

success: function (data) {
    console.log('data ' + data);
    $.each(data, function (key, value) {
        console.log('id' + data[key].id);
        $('#selectStaff').append('<option value="' + data[key].id + '">' + data[key].id + '</option>');
    });
}

但是data[key].id正在返回undefined,如果我只是打印出来data[key],我会得到数组的各个字符。

selectStaff是 a 的 ID SELECT

我错过了什么??任何帮助都感激不尽。

谢谢

4

5 回答 5

2

好吧,要么你必须使用JSON.parse(data)或添加dataType选项到你的 ajax 函数,所以它知道响应是 JSON 格式,没有别的。

....
 dataType:"json",
success: function (data) {
     javascript: console.log('data ' + data);
     $.each(data, function(key, value) {
     javascript: console.log('id' + data[key].id);
     $('#selectStaff').append('<option value="' + data[key].id+ '">' + data[key].id+ '</option>');
       });
}

或者

 success: function (data) {
     javascript: console.log('data ' + data);
     data=JSON.parse(data);
     $.each(data, function(key, value) {
       .......
于 2013-11-08T11:23:11.820 回答
1

当数据被定义为对象时,您的代码在小提琴中工作。

鉴于您声明:

如果我只是打印出 data[key],我会得到数组的各个字符。

听起来您的$.ajax调用结果是返回一个字符串,而不是反序列化的 JSON。您可以使用该dataType参数来强制反序列化:

$.ajax({
    dataType: 'json',
    // rest of your settings...
});
于 2013-11-08T11:22:05.560 回答
0

你需要解析json。

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

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

在 JavaScript 中解析 JSON?

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.getJSON( "example.json", function() {
  console.log( "success" );
})
  .done(function() {
    console.log( "second success" );
  })
  .fail(function() {
    console.log( "error" );
  })
  .always(function() {
    console.log( "complete" );
  });

// Perform other work here ...

// Set another completion function for the request above
jqxhr.complete(function() {
  console.log( "second complete" );
});

(以上取自http://api.jquery.com/jQuery.getJSON/

于 2013-11-08T11:24:15.647 回答
0

尝试使用 jquery 解析 json:

success: function (data2) {
    var data=jQuery.parseJSON(data2);
    console.log('data ' + data);
    $.each(data, function (key, value) {
        console.log('id' + data[key].id);
        $('#selectStaff').append('<option value="' + data[key].id + '">' + data[key].id + '</option>');
    });
}
于 2013-11-08T11:25:16.053 回答
0

检查你的数据参数的类型,你想接收一个对象。如果它不是一个对象,那么你需要解析它。

您可以指定为您处理它的数据类型:

$.ajax({
    datatype: 'json',
    // ...
});

或者您可以手动解析它:

if (typeof data === "string") {
    data = $.parseJSON(data);
}
于 2013-11-08T11:26:34.187 回答