从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对象)。
或者你可以设置dataType
为json
自动转换。
我不确定你的设置出了什么问题。 也许服务器没有正确设置标题。 不确定。 作为一个远射,你可以试试这个
$.ajax({ url : url, dataType : 'json' }) .done(function(data, statusText, resObject) { var jsonData = resObject.responseJSON })