Подтвердить что ты не робот

Анализ JSON из данных успеха JQuery.ajax

У меня возникли проблемы с получением содержимого объекта 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>";

он возвращает "undefined" на страницу. Что я делаю неправильно?

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

4b9b3361

Ответ 1

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

Ответ 2

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

var returnedData = JSON.parse(response);

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

Ответ 3

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

alert(data)

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

[object Object]

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

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

JSON.parse(data)

Ответ 4

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

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

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

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

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

myResult = JSON.parse(request.responseText);

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

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

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

Для записи на это уже ответил Andy E для кого-то еще ЗДЕСЬ.

edit - Увидел запрос на "официальные или достоверные источники", и, вероятно, одним из кодеров, который я считаю наиболее вероятным, будет John Resig ~ ECMA5 JSON ~ я бы связался с фактической спецификацией ECMA5 в отношении поддержки родного JSON, но я бы скорее передал кого-то капитану вроде Resig, а не сухую спецификацию.

Ответ 5

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

.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

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

var Data = $.parseJSON(response);

Ответ 7

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

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

Ответ 8

Из jQuery API: с настройкой dataType. Если ни один не указан, jQuery попытается вывести его с помощью $.parseJSON() на основе типа MIME (тип MIME для текста JSON - это "application/json" ) ответа (в 1.4 JSON будет создан объект JavaScript).

Или вы можете установить dataType в json для его автоматического преобразования.

Ответ 9

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

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

Ответ 10

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

 <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);
                }
        });
     });
});

Ответ 11

разобрать и преобразовать его в объект 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);  
    }