Моя строка json возвращается в неверном формате. Могу ли я использовать $ .ajax для получения данных? - PullRequest
0 голосов
/ 12 ноября 2010

РЕДАКТИРОВАТЬ: Кажется, что форматирование строки JSON не является проблемой. Вместо этого я не вижу строку json в разделе ответов Firebug, и все же обработчики ошибок ajax не выбрасываются.

Привет! * * 1003

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

{"A":1,"Total":1}

Прочитав несколько потоков в stackoverflow и даже на странице документации jquery для $ .ajax, я узнал, что правильное форматирование строки json также должно иметь каждое значение в двойных кавычках.

{"A":"1","Total":"1"}

Я предполагаю, что именно поэтому мой jquery ajax не работает:

$.ajax({
    type: "GET",
    url: "http://test/testServices/InfoService.svc/GetInfoStats?pId=76&mId=2117",
    dataType: "json",
    error: function(xml,txtStatus, errorThrown){
        alert(xml + " " + txtStatus + " " + errorThrown);
    },
    success: function (msg, test) {
        alert("JSON DATA LOADED! " + msg);
        $(".MainContainerBottom").html(msg);
    }
});

$('.log').ajaxError(function () {
        $(this).text('Triggered ajaxError handler.');
    });

Окно консоли Firebug сообщает мне, что значение GET было «200 OK 398ms» последовательно, и если я проверяю тестовую переменную, оно также возвращает успех. MSN возвращает ноль, хотя! Раздел «Параметры» и «Заголовки» Firebug также выглядит хорошо, но раздел «Ответ» пуст.

Я также возился с dataType $ .ajax и сначала использовал его как jsonp, а firebug вернул ошибку, сообщающую

Invalid Label
{"A":1,"Total":1}

Так что я знаю, что информация возвращается правильно, но я не могу получить к ней доступ. Я предполагаю, что это из-за проблемы форматирования, с которой я начал этот пост. Это правильно?

Если у меня нет возможности самостоятельно изменять веб-сервис, что я могу сделать, чтобы вывести данные json в мой сценарий?

Большое спасибо! <3 Джон </p>

РЕДАКТИРОВАТЬ: Для Guffa

Response Headers
Content-Length  39
Content-Type    application/json; charset=utf-8
Server  Microsoft-IIS/7.5
X-Powered-By    ASP.NET
Date    Fri, 12 Nov 2010 21:58:57 GMT

Request Headers
    Host    test
    User-Agent  Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.9) Gecko/20100824 Firefox/3.6.9
    Accept  application/json, text/javascript, */*
    Accept-Language en-us,en;q=0.5
    Accept-Encoding gzip,deflate
    Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
    Keep-Alive  115
    Connection  keep-alive

Окончательное редактирование: Я поговорил с парнем, который настраивал веб-сервис для нас, и, очевидно, были некоторые особые ограничения на информацию, отправляемую обратно. Он установил некоторые разрешения для нашего приложения на доступ к данным, и он работал безупречно.

Спасибо всем за помощь! Я действительно удивлен количеством людей, которые ответили и попытались помочь мне. Сейчас я определенно буду следить за сообществом stackoverflow и, надеюсь, однажды смогу помочь и другим:)

Ответы [ 4 ]

1 голос
/ 12 ноября 2010

Нет, в исходной строке JSON нет ничего плохого.Значения не обязательно должны быть строками, они могут быть числами.

Вы должны искать ошибку в другом месте.Добавьте обработчик ошибок в вызов Ajax, чтобы вы могли получить любую информацию о том, что может идти не так.

Когда вы выбираете данные как JSONP, он ожидает, что результат будет заключен в вызов обратного вызова: callback({"A":1,"Total":1});.Код выполняется, когда он возвращается, и поскольку вокруг объекта нет обратного вызова, скобки вокруг литерала объекта вместо этого интерпретируются как блок кода, а имена свойств интерпретируются как метки кода.Метки кода должны быть идентификаторами, а не строками, отсюда и сообщение об ошибке.

0 голосов
/ 12 ноября 2010

Какую версию .net вы используете? если> 3.5, формат вашего сообщения будет другим. Попробуйте следующее:

      success: function (msg, test) {
        var newMes = msg.d; 
     alert(newMes.A);
0 голосов
/ 12 ноября 2010

Удалите объявление contentType из вашего вызова $ .ajax. contentType определяет тип содержимого данных, которые вы отправляете на сервер, а не то, что вы ожидаете получить обратно. Это может запутать простой запрос GET.

0 голосов
/ 12 ноября 2010
JSON.parse('{"A":2}')['A']

Строки должны быть заключены в двойные кавычки, числовые литералы - нет. Это что-то еще. Можете ли вы предоставить реальные данные и реальный URL и т. Д.?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...