Проблема с получением результата JSON с помощью jQuery в Firefox и Chrome (IE8 Works) - PullRequest
1 голос
/ 29 апреля 2010

Я пытаюсь проанализировать JSON с помощью jQuery, и у меня возникают проблемы. Используя приведенный ниже код, данные возвращаются к нулю:

<!DOCTYPE html>
<html>
  <head>
    <title>JSON Test</title>
  </head>
  <body>
    <div id="msg"></div>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>
        $.ajax({
          url: 'http://datawarehouse.hrsa.gov/ReleaseTest/HGDWDataWebService/HGDWDataService.aspx?service=HC&zip=20002&radius=10&filter=8357&format=JSON',
          type: 'GET',
          dataType: 'json',
          success: function(data) {
            $('#msg').html(data[0].title); // Always null in Firefox/Chrome. Works in IE8.
          },
          error: function(data) {
            alert(data);
          }
        });
    </script>
  </body>
</html>

Результаты JSON выглядят следующим образом:

{"title":"HEALTHPOINT TYEE CAMPUS","link":"http://www.healthpointchc.org","id":"tag:datawarehouse.hrsa.gov,2010-04-29:/8357","org":"HEALTHPOINT TYEE CAMPUS","address":{"street-address":"4424 S. 188TH St.","locality":"Seatac","region":"Washington","postal-code":"98188-5028"},"tel":"206-444-7746","category":"Service Delivery Site","location":"47.4344818181818 -122.277672727273","update":"2010-04-28T00:00:00-05:00"}

Если я заменю свой URL-адрес URL-адресом Flickr API (http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?),, я получу верный результат JSON, который смог использовать.

Я успешно проверил свой JSON на JSONLint , поэтому у меня закончились идеи относительно того, что я могу делать неправильно.

Есть мысли?

Обновление: Я заставил клиента переключить тип контента на application / json. К сожалению, я все еще испытываю ту же проблему. Я также обновил свой HTML-код и включил действующий URL-адрес, с которым я работал.

Обновление 2: Я только что попробовал в IE8, и он работает нормально. По некоторым причинам он не работает ни в Firefox 3.6.3, ни в Chrome 4.1.249.1064 (45376). Я заметил ошибку с возвращаемыми данными (разработчик возвращает набор данных, даже для запросов, которые всегда будут возвращать одну запись), но это все еще сбивает с толку, почему это не работает в других браузерах.

Может быть важно отметить, что я работаю из файла HTML в моей локальной файловой системе. Я думал, что это может быть проблема XSS, но это не объясняет, почему Flickr работает.

Ответы [ 5 ]

5 голосов
/ 03 мая 2010

API Flickr поддерживает JSONP , а тот, к которому вы подключаетесь, - нет.

jQuery видит =? и понимает, что существует запрос на обратный вызов JSONP, и создает его. Вы можете увидеть это в строке 5003 библиотеки jQuery, которую использует ваш образец страницы.

Итак, вам нужно изменить две вещи

  1. Добавьте параметр обратного вызова в ваш запрос. Как бы вы (или ваш разработчик) не хотели это называть. Допустим, вы выбрали cb - поэтому добавьте это в запрос AJAX: &cb=? (таким образом, мы позволим jQuery обрабатывать создание обратного вызова для нас)
  2. Попросите вашего разработчика, который заставил службу принять этот новый параметр, и добавьте в него результат перед его возвратом.
3 голосов
/ 29 апреля 2010

Является ли содержимое "application / json"?

3 голосов
/ 29 апреля 2010

Рассматривали ли вы использовать более гибкий $ .ajax? Я бы разбил его и посмотрел, не предоставляет ли $ .getJSON по умолчанию то, что вам нужно.

$.ajax({
   url: 'results.json',
   type: 'GET',
   dataType: 'json',
   success: function(data, status)
   {
       alert(data);
   }
});

Будет эквивалентной реализацией ajax 'parent'. Попробуйте поиграться и посмотреть, есть ли конкретное свойство, которое вам нужно установить.

1 голос
/ 05 мая 2010

Это случай ошибки запроса междомена. Flickr работает, потому что это JSONP, в то время как другой URL не работает, потому что не включен JSONP. 1. Проверьте, поддерживает ли URL JsonP 2. если нет, создайте прокси-веб-службу в локальном домене (тот же домен, что и веб-страница) 3. Вызовите тот прокси-веб-сервис, который в свою очередь вызывает внешний URL-адрес со стороны сервера.

1 голос
/ 29 апреля 2010

если один URL (URL-адрес flickr) работает, а другой нет (ваш), я бы сказал, что проблема с вашим URL-адресом.

Похоже, вы используете относительный путь, это ваше намерение? Вы использовали сетевую панель firebug , чтобы увидеть, как выглядит запрос?

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