从JQuery.ajax成功数据parsingJSON

我无法从JQery.ajax调用中获取JSON对象的内容。 我的电话:

$('#Search').click(function () { var query = $('#query').valueOf(); $.ajax({ url: '/Products/Search', type: "POST", data: query, dataType: 'application/json; charset=utf-8', success: function (data) { alert(data); for (var x = 0; x < data.length; x++) { content = data[x].Id; content += "<br>"; content += data[x].Name; content += "<br>"; $(content).appendTo("#ProductList"); // updateListing(data[x]); } } }); }); 

看起来JSON对象正在被正确地返回,因为“alert(data)”显示以下内容

 [{"Id": "1", "Name": "Shirt"}, {"Id": "2", "Name":"Pants"}] 

但是当我尝试显示使用的页面的Id或名称:

 content = data[x].Id; content += "<br>"; content += data[x].Name; content += "<br>"; 

它返回“undefined”到页面。 我究竟做错了什么?

谢谢您的帮助。

数据将作为JSON的string表示forms返回,并且不会将其转换回JavaScript对象。 将dataType设置为'json'以自动转换。

我build议你使用:

 var returnedData = JSON.parse(response); 

将JSONstring(如果它只是文本)转换为JavaScript对象。

您可以确保这种types的错误(使用string,而不是json)不会发生的方式之一是看看什么打印在alert 。 当你这样做

 alert(data) 

如果数据是一个string,它将打印包含的所有内容。 不过如果你打印的是json对象。 您将在警报中得到以下回应

 [object Object] 

如果这个响应,那么你可以肯定,你可以使用这个作为一个对象(在这种情况下JSON)。

因此,在使用之前,您需要先将string转换为json。

 JSON.parse(data) 

那么…你大约有3/4的方式…你已经有了你的JSON文本。

问题是,你似乎正在处理这个string,就好像它已经是一个JavaScript对象,其属性与被传输的字段有关。

这不是……它只是一个string。

像“content = data [x] .Id”的查询 必然会失败,因为JavaScript没有find这些属性附加到它正在查看的string…再次,它只是一个string。

您应该能够简单地将数据parsing为JSON,通过… yup … JSON对象的parsing方法。

 myResult = JSON.parse(request.responseText); 

现在myResult是一个包含通过AJAX传输的属性的JavaScript对象。

这应该允许你按照你显示的方式来处理它。

看起来像添加ECMA5时添加JSON.parse,所以任何相当现代的东西应该能够处理这个本地化…如果你必须处理化石,你也可以尝试外部库来处理这个,如jQuery或JSON2 。

为了logging,Andy E已经为别人在这里回答了这个问题。

编辑 – 看到“官方或可信来源”的请求,也许我认为最可信的一个编码器是John Resig〜ECMA5 JSON〜我会链接到有关本机JSON支持的实际ECMA5规范,但我会而是将某人引荐给Resig之类的高手,而不是干式规范。

你可以使用jQuery的parseJSON方法:

 var Data = $.parseJSON(response); 

它的工作,例如

 .ajax({ url: "http://localhost:11141/Search/BasicSearchContent?ContentTitle=" + "تهران", type: 'GET', cache: false, success: function (result) { // alert(jQuery.dataType); if (result) { // var dd = JSON.parse(result); alert(result[0].Id) } }, error: function () { alert("No"); } }); 

你需要

 result[0].Whatever 

试试jQuery的each函数来遍历你的json对象:

 $.each(data,function(i,j){ content ='<span>'+j[i].Id+'<br />'+j[i].Name+'<br /></span>'; $('#ProductList').append(content); }); 

从jQuery API:设置dataType ,如果没有指定,jQuery将尝试根据$.parseJSON()的MIMEtypes(JSON文本的MIMEtypes是“application / json”)以$.parseJSON()推断它(在1.4 JSON中将产生一个JavaScript对象)。

或者你可以设置dataTypejson自动转换。

我不确定你的设置出了什么问题。 也许服务器没有正确设置标题。 不确定。 作为一个远射,你可以试试这个

 $.ajax({ url : url, dataType : 'json' }) .done(function(data, statusText, resObject) { var jsonData = resObject.responseJSON })