Мобильное приложение jQuery + удаленный веб-сервис REST: альтернативы JSONP? - PullRequest
1 голос
/ 15 июня 2011

В настоящее время я работаю над сайтом jQuery Mobile, который позже будет преобразован в приложение через Titanium.Я создал веб-сервис RESTful JSON, который работает на другом сервере, чем приложение jQuery Mobile.Веб-сервис используется через AJAX с использованием JSONP.

Одна вещь, которую я нахожу раздражающей, заключается в том, что я не могу использовать коды ошибок HTTP, потому что jQuery автоматически прерывает вызов JSONP всякий раз, когда сервер выдает ошибку.Я никогда не смогу заполучить код ошибки на стороне клиента.

Другое дело, что JSONP работает только с HTTP-глаголом GET, вы не можете, например, выдать JSONP POST (В настоящее время веб-служба GET only, но это может измениться).

Есть ли альтернативы JSONP?Или JSONP - единственный выбор, который у меня есть при использовании удаленных веб-служб JSON с AJAX?Например, как приложения Twitter взаимодействуют с API Twitter (у них есть REST API)?

Ответы [ 2 ]

4 голосов
/ 16 июня 2011

Ваш вопрос является хорошей иллюстрацией того, почему люди жалуются, что jquery слишком легко принять;)

JSONP - это не ajax.Нет никаких успешных и неудачных обратных вызовов.JSONP таков:

  1. поместите параметры в URL
  2. add & jsoncallback = random2745273
  3. создайте глобальную переменную random2745273 и поместите в нее ссылку обратного вызова
  4. добавьте <script src="theurlhere"></script> к head
  5. , это все, что вы можете сделать.

Сервер вернет

random2745273({somedata});

и вот какВаш обратный вызов называется.

Если вы хотите сообщить об ошибках, то ваш сервер должен сгенерировать правильный код.Вы не будете знать, какие HTTP-заголовки были отправлены.

И это единственный способ связать междоменный интерфейс с API.Отправка междоменных сообщений также возможна с помощью генерации iframes, но она хакерская и редко используется.

[edit]

Хорошо, это заставило меня задуматься ... Я мог бы использовать хак iframe дляоберните JSONP!

И, как обычно, я был не первым, у кого появилась идея (и я, наконец, достаточно скромен, чтобы погуглить мои идеи, ожидая этого;))

Вот оноэто: http://beebole.com/en/blog/general/sandbox-your-cross-domain-jsonp-to-improve-mashup-security/

офигенно

[edit2]

оу, я забыл ... Есть еще один.

window.postMessage

Это уже реализовано в некоторых браузерах.Если вам не нужно быть совместимым с большинством браузеров, вы можете начать использовать его сейчас!:)

0 голосов
/ 05 июля 2011

После еще одного исследования postMessage я нашел альтернативу JSONP: AJAX через междоменный обмен сообщениями с EasyXDM.

См. http://easyxdm.net/wp/2010/03/17/cross-domain-ajax/

...