JQuery JSONP вызов работает для других сайтов, но не мой
Я работаю над небольшим букмарклетом, и, следовательно, обратные вызовы на мой сайт должны будут выполняться через JSONP, чтобы обойти ограничения между доменами. Я включил несколько демонстраций ниже, чтобы вы могли точно понять, о чем я говорю.
У меня все отлично работает и работает с источником JSON, предоставленным на сайте Twitter (мой букмарклет не имеет ничего общего с Twitter, просто я могу заставить его работать, используя их данные JSON). Тем не менее, я не могу заставить его работать с JSON с моего сервера.
Чтобы упростить задачу, я взял точный ответ, полученный от вызова JSON в Twitter, и поместил его в файл JSON на своем собственном сервере. Даже при вызове точных данных JSON, когда JSON приходит с моего сервера, он не загружается.
Учитывая это, я, кажется, исключил: неправильный JSON и мой код JavaScript / jQuery (опять же, работает, когда он приходит откуда-то еще).
Это заставляет меня задуматься о том, как мой сервер возвращает файл JSON, что jQuery не нравится. Я проверил, и JSON, приходящий с моего сервера, настроен на соответствующий тип контента ("application/json").
Вот несколько примеров, чтобы вы могли видеть именно то, что я вижу. У кого-нибудь есть какие-либо идеи?
Еще раз подчеркнем, что два примера ниже представляют собой один и тот же код, просто вызов одного и того же результата JSON из разных мест. Стучу головой о стену здесь.
Спасибо за любую помощь или совет.
Рабочая Демо:
http://www.hallsnet.com/temp/working.htm(см. /temp/working.js для источника JavaScript)
Нерабочий Демо:
http://www.hallsnet.com/temp/not-working.htm(см. /temp/not-working.js для источника JavaScript)
1 ответ
Ваш json-файл не вызывает никакой функции, в то время как jQuery ожидает, что json будет динамически вызывать функцию в зависимости от того, какое имя jQuery назначает ему (как вы используете callback=?
в URL).
Если вы посмотрите на файл json в Твиттере, он добавит данные в имя функции на основе того, на что установлен, например, параметр обратного вызова в URL-адресе. callback=asd
вызовет данные в файле json с именем функции asd
:
http://twitter.com/status/user_timeline/smith.json?count=10&callback=asd
asd([{"geo":null,"use...
так далее...
В вашем файле JSON:
http://www.hallsnet.com/temp/not-working.json?callback=saddas32
вы не оборачиваете свои данные внутри какого-либо обратного вызова функции (а jQuery создает их динамически, поскольку вы не указали статический для использования), поэтому файл json на самом деле не вызывает какую-либо функцию, а jQuery просто бесконечно ждет это сделать так.