Разбор JSON из данных об успехе JQuery.ajax - PullRequest
70 голосов
/ 13 марта 2011

У меня проблемы с получением содержимого объекта JSON из вызова JQery.ajax. Мой звонок:

$('#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 или Name на странице, используя:

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

возвращает «неопределенное» на страницу. Что я делаю не так?

Спасибо за помощь.

Ответы [ 11 ]

93 голосов
/ 13 марта 2011

Данные возвращаются как строковое представление JSON, и вы не преобразуете их обратно в объект JavaScript.Установите dataType равным 'json', чтобы преобразовать его автоматически.

59 голосов
/ 01 июля 2013

Я рекомендую использовать:

var returnedData = JSON.parse(response);

для преобразования строки JSON (если это просто текст) в объект JavaScript.

9 голосов
/ 15 июля 2015

Один из способов избежать ошибки такого типа (с использованием строки вместо json) - посмотреть, что печатается в alert.Когда вы делаете

alert(data)

, если data является строкой, она будет печатать все, что содержится.Однако, если вы печатаете, это объект JSON.вы получите следующий ответ в оповещении

[object Object]

Если это ответ, то вы можете быть уверены, что можете использовать его как объект (в данном случае json).

Таким образом, вам нужно сначала преобразовать вашу строку в json, прежде чем использовать ее следующим образом:

JSON.parse(data)
7 голосов
/ 21 февраля 2016

Работает нормально, Пример:

.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
6 голосов
/ 27 июня 2013

Ну ... вы примерно на 3/4 пути ... у вас уже есть ваш JSON в виде текста.

Проблема в том, что вы, кажется, обрабатываете эту строку, как будто она уже былаобъект JavaScript со свойствами, относящимися к переданным полям.

Это не ... это просто строка.

Запросы типа "content = data [x] .Id;"должны потерпеть неудачу, потому что JavaScript не находит эти свойства прикрепленными к строке, которую он просматривает ... опять же, это просто строка.

Вы должны иметь возможность просто анализировать данные как JSON через ... yup ... метод синтаксического анализа объекта JSON.

myResult = JSON.parse(request.responseText);

Теперь myResult - это объект javascript, содержащий свойства, которые были переданы через AJAX.

Это должно позволить вам обработать его.похоже, вы пытаетесь это сделать.

Похоже, что JSON.parse был добавлен, когда был добавлен ECMA5, поэтому все, что достаточно современно, должно быть в состоянии обработать это изначально ... если вам нужно работать с ископаемыми, вы можететакже попробуйте внешние библиотеки, чтобы справиться с этим, такие как jQuery или JSON2 .

Для справки, Энди E уже ответил кому-то еще ЗДЕСЬ.

edit - Видел запрос на «официальные или достоверные источники», и, вероятно, одним из кодеров, который я считаю наиболее вероятным, был бы Джон Ресиг ~ ECMA5 JSON ~ Я бы связался с действующей спецификацией ECMA5, касающейся встроенной поддержки JSON, но я бы скорее отослал кого-нибудь к мастеру вроде Resig, чем к сухой спецификации.

3 голосов
/ 24 апреля 2015

вы можете использовать метод jQuery parseJSON:

var Data = $.parseJSON(response);
3 голосов
/ 19 мая 2013

Попробуйте функцию jquery each, чтобы пройти через ваш объект json:

$.each(data,function(i,j){
    content ='<span>'+j[i].Id+'<br />'+j[i].Name+'<br /></span>';
    $('#ProductList').append(content);
});
0 голосов
/ 10 июня 2019

разобрать и преобразовать его в объект 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);  
    }
0 голосов
/ 23 марта 2019

тип ввода Кнопка

 <input type="button" Id="update" value="Update">

Я успешно разместил форму с AJAX на Perl. После публикации формы контроллер возвращает 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);
                }
        });
     });
});
0 голосов
/ 17 января 2016

Я не уверен, что не так с вашей настройкой. Возможно, сервер неправильно устанавливает заголовки. Точно сказать не могу. Как длинный выстрел, вы можете попробовать это

$.ajax({
    url : url,
    dataType : 'json'
})
.done(function(data, statusText, resObject) {
   var jsonData = resObject.responseJSON
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...