jQuery + JSONP возвращать данные пустыми? - PullRequest
2 голосов
/ 09 марта 2010

Мне нужно получить доступ к данным на поддомене, который я пытался использовать JSONP, для которого jQuery поддерживает. Данные, к которым я обращаюсь на поддомене, представляют собой статический (восстановленный) файл .json (http://www.example.com/data.json)

Я столкнулся с ошибками "Invalid Label Error" и понял, что данные должны быть заключены в скобки и использовать? Callback =?

http://www.example.com/data.json?callback=?

({
 "items": [
 {   
  "url": "http://www.example.com",
  "id": "2981",
        "title": "title",
  "description": "lorem ipsum sit dolor",
  "start": "00:10:00",
   "end": "00:20:00"
 }
})


$.getJSON(url, function(data){
 console.log("json: " + data);
});

Обтекание данных в () сработало, так как теперь я могу видеть данные, возвращаемые на вкладке NET Firebug, но $ .getJSON ничего не возвращает, я не думаю, что он срабатывает.

Чего мне не хватает? Нужно ли что-то еще делать на стороне сервера?

Спасибо!

Ответы [ 3 ]

1 голос
/ 09 марта 2010

Данные, которые вы возвращаете, не являются JSON-P.

В Википедии есть приличное объяснение того, как должен выглядеть JSON-P . Существует специальное руководство по jQuery для принятия JSON-P .

0 голосов
/ 15 февраля 2014

если вы попытаетесь проверить данные JSON, например, на http://jsonlint.com/, вы увидите, что есть некоторые ошибки.

Вы генерируете данные JSON с помощью фреймворка или вручную.

Ручная генерация данных JSON подвержена ошибкам.

Надеюсь, это поможет вам исправить ошибку.

Martin

0 голосов
/ 09 марта 2010

Код, который вы возвращаете из HTTP-запроса, выполняется браузером.

Браузер выполняет его нормально, но не знает, куда его поместить, потому что он ни к чему не привязан.

К счастью, jQuery достаточно умен и позволяет вам использовать параметр (callback = ? ) для использования в вашем коде.

Ваш серверный язык должен добавить этот параметр обратного вызова и сделать ваш ответ JSON похожим на вызов функции JavaScript:

<?php echo $_GET["callback"]?>({
 "items": [
 {   
  "url": "http://www.example.com",
  "id": "2981",
        "title": "title",
  "description": "lorem ipsum sit dolor",
  "start": "00:10:00",
   "end": "00:20:00"
 }
})
...