从JQuery.ajax成功数据解析JSON
从JQery.ajax调用获取JSON对象的内容时遇到问题。我的电话:从JQuery.ajax成功数据解析JSON,json,jquery,Json,Jquery,从JQery.ajax调用获取JSON对象的内容时遇到问题。我的电话: $('#Search').click(function () { var query = $('#query').valueOf(); $.ajax({ url: '/Products/Search', type: "POST", data: query, dataType: 'application/json; charset=utf-8',
$('#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]);
}
}
});
});
但当我尝试使用以下命令向页面显示Id或名称时:
content = data[x].Id;
content += "<br>";
content += data[x].Name;
content += "<br>";
content=data[x].Id;
内容+=“
”;
内容+=数据[x]。名称;
内容+=“
”;
它会将“未定义”返回到页面。我做错了什么
感谢您的帮助。数据以JSON的字符串表示形式返回,您不会将其转换回JavaScript对象。将
数据类型设置为just'json'
,使其自动转换。尝试jquery每个
函数遍历json对象:
$.each(data,function(i,j){
content ='<span>'+j[i].Id+'<br />'+j[i].Name+'<br /></span>';
$('#ProductList').append(content);
});
$。每个(数据、函数(i、j){
content=''+j[i].Id+'
'+j[i].Name+'
';
$(“#产品列表”)。追加(内容);
});
嗯。。。你大概有四分之三的路程在那里。。。您已经将JSON作为文本
问题是,您似乎在处理这个字符串,好像它已经是一个JavaScript对象,具有与传输的字段相关的属性
它不是。。。这只是一根绳子
像“content=data[x].Id;”这样的查询肯定会失败,因为JavaScript找不到附加到它正在查看的字符串的这些属性。。。再说一次,它只是一根绳子
您应该能够通过以下方式简单地将数据解析为JSON。。。是的。。。JSON对象的解析方法
myResult = JSON.parse(request.responseText);
现在myResult是一个javascript对象,包含通过AJAX传输的属性
这应该能让你以你看起来想要的方式来处理它
看起来JSON.parse是在添加ECMA5时添加的,所以任何相当现代的东西都应该能够以本机方式处理此问题。。。如果必须处理化石,还可以尝试使用外部库来处理,例如或
为了记录在案,Andy E已经为其他人回答了这个问题
编辑-看到了对“官方或可信来源”的请求,我认为最可信的编码者之一可能是John Resig ~~我本来会链接到有关本机JSON支持的实际ECMA5规范,但我更愿意将某人推荐给像Resig这样的大师,而不是干式规范。我建议您使用:
var returnedData = JSON.parse(response);
要将JSON字符串(如果只是文本)转换为JavaScript对象,可以使用jQuery parseJSON方法:
var Data = $.parseJSON(response);
确保此类错误(使用字符串而不是json)不会发生的方法之一是查看警报中打印的内容。当你这样做的时候
alert(data)
如果数据是字符串,它将打印包含的所有内容。但是,如果打印的是json对象。您将在警报中得到以下响应
[object Object]
如果这是响应,那么您可以确保可以将其用作对象(本例中为json)
因此,您需要先将字符串转换为json,然后再通过以下方式使用它:
JSON.parse(data)
从jQuery API:设置为dataType
,如果未指定任何值,jQuery将根据响应的MIME类型(JSON文本的MIME类型为“application/JSON”)(在1.4中,JSON将生成一个JavaScript对象)使用$.parseJSON()
尝试推断它。
或者您可以将数据类型设置为json
,以自动转换它。我不确定您的设置出了什么问题。可能服务器没有正确设置标题。不确定。从长远来看,你可以试试这个
$.ajax({
url : url,
dataType : 'json'
})
.done(function(data, statusText, resObject) {
var jsonData = resObject.responseJSON
})
它很好用,
例:
最后,您需要使用以下语句
result[0].Whatever
输入类型按钮
<input type="button" Id="update" value="Update">
我已经用perl成功地发布了一个带有AJAX的表单。发布表单后,controller返回一个JSON响应,如下所示
$(function() {
$('#Search').click(function() {
var query = $('#query').val();
var update = $('#update').val();
$.ajax({
type: 'POST',
url: '/Products/Search/',
data: {
'insert': update,
'query': address,
},
success: function(res) {
$('#ProductList').empty('');
console.log(res);
json = JSON.parse(res);
for (var i in json) {
var row = $('<tr>');
row.append($('<td id=' + json[i].Id + '>').html(json[i].Id));
row.append($('<td id=' + json[i].Name + '>').html(json[i].Name));
$('</tr>');
$('#ProductList').append(row);
}
},
error: function() {
alert("did not work");
location.reload(true);
}
});
});
});
$(函数(){
$(“#搜索”)。单击(函数(){
var query=$('#query').val();
var update=$('#update').val();
$.ajax({
键入:“POST”,
url:“/Products/Search/”,
数据:{
“插入”:更新,
“查询”:地址,
},
成功:功能(res){
$('#ProductList')。为空('';
控制台日志(res);
json=json.parse(res);
for(json中的var i){
变量行=$('');
append($('').html(json[i].Id));
append($('').html(json[i].Name));
$('');
$('#ProductList')。追加(行);
}
},
错误:函数(){
警惕(“不起作用”);
位置。重新加载(true);
}
});
});
});
解析并将其转换为js对象,就是它。
success: function(response) {
var content = "";
var jsondata = JSON.parse(response);
for (var x = 0; x < jsonData.length; x++) {
content += jsondata[x].Id;
content += "<br>";
content += jsondata[x].Name;
content += "<br>";
}
$("#ProductList").append(content);
}
成功:功能(响应){
var-content=“”;
var jsondata=JSON.parse(响应);
对于(var x=0;x”;
content+=jsondata[x]。名称;
内容+=“
”;
}
$(“#产品列表”)。追加(内容);
}
文档帮助。显示”应用程序/json;charset=utf-8'
对于dataType
不是有效的值。通过json.parse()转换为json我相信,abobreshov说的是简单的success:function(data){data=json.parse(data);}
,如果我没有弄错的话。@DipakYadav:getJSON
不会发布。@marcelocontos(关于你的答案):这是真的。然而,根据“任何格式错误的JSON都会被拒绝,并抛出一个解析错误。从jQuery 1.9开始,一个空响应也会被拒绝”。因此,如果您确定服务器将返回流行格式的json,那么您只能使用数据类型:“json”
。如果它只返回“一个字符串,看起来像JSON”,那么应该使用数据类型:“text JSON”
强制jQuery转换.header('Content-Type:application/JSON');如果您正在使用phpI,那么真正的问题是:$.ajax()
为什么不转换它?
$(function() {
$('#Search').click(function() {
var query = $('#query').val();
var update = $('#update').val();
$.ajax({
type: 'POST',
url: '/Products/Search/',
data: {
'insert': update,
'query': address,
},
success: function(res) {
$('#ProductList').empty('');
console.log(res);
json = JSON.parse(res);
for (var i in json) {
var row = $('<tr>');
row.append($('<td id=' + json[i].Id + '>').html(json[i].Id));
row.append($('<td id=' + json[i].Name + '>').html(json[i].Name));
$('</tr>');
$('#ProductList').append(row);
}
},
error: function() {
alert("did not work");
location.reload(true);
}
});
});
});
success: function(response) {
var content = "";
var jsondata = JSON.parse(response);
for (var x = 0; x < jsonData.length; x++) {
content += jsondata[x].Id;
content += "<br>";
content += jsondata[x].Name;
content += "<br>";
}
$("#ProductList").append(content);
}