从JQuery.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',

从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]);
            }
        }
    });
});
但当我尝试使用以下命令向页面显示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);
}