json Uncaught SyntaxError: неожиданный токен:


попытка сделать вызов и получить очень простой, одна строка, JSON-файл.

$(document).ready(function() {

    jQuery.ajax({ 
        type: 'GET',
        url: 'http://wncrunners.com/admin/colors.json' ,
        dataType: 'jsonp', 
        success: function(data) { 
            alert('success');
        }
    });


  });//end document.ready

вот сырой запрос:

GET http://wncrunners.com/admin/colors.json?callback=jQuery16406345664265099913_1319854793396&_=1319854793399 HTTP/1.1
Host: wncrunners.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2
Accept: */*
Referer: http://localhost:8888/jquery/Test.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

вот сырой ответ:

HTTP/1.1 200 OK
Date: Sat, 29 Oct 2011 02:21:24 GMT
Server: Apache/1.3.33 (Unix) mod_ssl/2.8.22 OpenSSL/0.9.7d SE/0.5.3
Last-Modified: Fri, 28 Oct 2011 17:48:47 GMT
ETag: "166a2402-10-4eaaeaff"
Accept-Ranges: bytes
Content-Length: 16
Content-Type: text/plain
Connection: close

{"red" : "#f00"}

JSON возвращается в ответ (красный: #f00), но Chrome сообщает Uncaught SyntaxError: неожиданный токен: цвета.json: 1

Если я перейду непосредственно к самому url, JSON возвращается и отображается в браузере.

Если я вставляю содержание цветов.json в JSLINT, JSON проверяет.

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

EDIT - jQuery.ajax () вызов выше работает идеально на jsfiddle.net, и возвращает предупреждение "успех", как ожидалось.

EDIT 2 - этот URL отлично работает 'http://api.wunderground.com/api/8ac447ee36aa2505/geolookup/conditions/q/IA/Cedar_Rapids.json - я заметил, что оно вернулось как Тип: text / javascript и Chrome не бросали неожиданный токен. Я проверил несколько других url-адресов, и единственный, который не бросает неиспользованный токен, - это wunderground, который возвращается как тип: text/javascript.

потоки, возвращаемые как text/plain и application / json, не анализируются правильно.

4 67

4 ответа:

Вы сказали jQuery ожидать JSONP ответ, который является, почему jQuery и добавил callback=jQuery16406345664265099913_1319854793396&_=1319854793399 часть к URL (вы можете увидеть это в вашем дампе запроса).

то, что вы возвращаете, это JSON, а не JSONP. Ваш ответ выглядит как

{"red" : "#f00"}

и jQuery ожидает что-то вроде этого:

jQuery16406345664265099913_1319854793396({"red" : "#f00"})

Если вам действительно нужно использовать JSONP, чтобы обойти ту же политику происхождения, то сервер, обслуживающий colors.json должен быть в состоянии фактически верните ответ JSONP.

если та же политика происхождения не является проблемой для вашего приложения, то вам просто нужно исправить dataType в своем jQuery.ajax вызов json вместо jsonp.

Я провел последние несколько дней, пытаясь понять это сам. Использование старого типа данных json дает вам проблемы перекрестного происхождения, в то время как установка типа данных в jsonp делает данные "нечитабельными", как описано выше. Таким образом, есть, по-видимому, два выхода, первый не сработал для меня, но кажется потенциальным решением и что я могу делать что-то неправильно. Это объясняется здесь [ https://learn.jquery.com/ajax/working-with-jsonp/ ].

тот, который работал для меня это выглядит следующим образом: 1-Загрузите плагин ajax cross origin [http://www.ajax-cross-origin.com/ ]. 2-добавьте ссылку на скрипт чуть ниже обычной ссылки jQuery. 3-добавьте строку "crossOrigin: true" в свою функцию ajax.

хорошо идти! вот мой рабочий код для этого:

  $.ajax({
      crossOrigin: true,
      url : "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.86,151.195&radius=5000&type=ATM&keyword=ATM&key=MyKey",
      type : "GET",
      success:function(data){
         console.log(data);
      }
    })

У меня была та же проблема, и решение состояло в том, чтобы инкапсулировать json внутри этой функции

jsonp (

.... ваш формат JSON ...

)

этот шестнадцатеричный код может быть заключен в кавычки и превращен в строку. Javascript может не понравиться символ#