-2

我正在返回一个通过 jQuery AJAX 调用转换为 JSON 的数据集,一切都很好!我收到的请求是:

{"Table":[[2,"BlackBerry Tour","2013-09-10","2013-09-13","Project"],null]}

对我来说看起来有效,也通过 JSLint 验证器运行它,再次,一切都很好!现在,每当我尝试访问这些数据中的任何一个时,我都会从以下内容中收到 undefined :

var dataObject = data.d //data.d is the response from the server and what is logged above
console.log(dataObject.Table) //undefined
console.log(dataObject["Table"]) //undefined

现在,如果我运行JSON.parse(dataObject),我就可以访问它了。然而,现在这是一个问题,因为它将驻留在 IE 上的站点将 IE 置于 IE7 模式,并且JSON根据 IE 始终未定义(我知道,IE7,它不在我的手中)。

所以我的问题是为什么我不能按原样使用返回的 JSON?为什么我必须在使用它之前通过 JSON.parse 运行它?可根据要求提供更多信息(AJAX 调用、DataSet 转换器等)

AJAX 调用,每个请求:

$.ajax({
    type: "POST",
    url: "DBManager.asmx/GetAdminList",
    contentType: 'application/json',
    data: '{"strEmail": "' + strFilter + '" }',
    dataType: "json",
    success: function (data) {
        console.log(data.d); //valid JSON response.
    }
});
4

2 回答 2

1

如果您返回一个字符串,您必须以某种方式将其解析为一个对象。例如

var data = '{"Table":[[2,"BlackBerry Tour","2013-09-10","2013-09-13","Project"],null]}';

var dataJ
eval('dataJ = ' + data )

alert(dataJ.Table)

http://jsfiddle.net/uvvAm/

如果你使用 jQuery,你可以使用

var dataJ = $.parseJSON(data);

这是可取的,因为eval它对各种攻击都是开放的。

于 2013-09-10T20:58:17.823 回答
0
var dataObject = eval('(' + data + ')');

alert(dataObject.Table);

试试这个东西可能对你有帮助。

于 2013-09-10T21:03:25.610 回答