JSONP и XMLHttpRequest вопрос - PullRequest
3 голосов
/ 27 июля 2011

Я пытаюсь понять ту же политику происхождения в браузерах (а также новичке в Javascript) и наткнулся на страницу JSONP в Википедии.В разделе Как это работает говорится -

Теперь рассмотрим, что в качестве атрибута src> для элемента можно указать любой URL-адрес, включая URL-адрес, возвращающий JSON.Это означает, что можно получить JSON через элемент скрипта на> странице HTML.

Однако документ JSON не является программой JavaScript.Если он должен оцениваться браузером в элементе, возвращаемое значение из URL-адреса src должно быть исполняемым JavaScript.В шаблоне использования JSONP URL-адрес возвращает динамически сгенерированный JSON с обернутым вокруг него вызовом функции.Это «дополнение» (или иногда «префикс») JSONP.

Мои вопросы -

  • Так что XMLHTTPRequest () должен возвращать только javascript илиHTML?Разве он не может вернуть чистый документ JSON?
  • Я думал, что та же политика происхождения не относится к вызову XMLHttpRequest ().Почему для вставки вызова в сторонний сервер нужно вставить тег в DOM?Вот как все рекламные надстройки на сайтах звонят домой, чтобы собрать данные?
  • В конце концов, я совсем не понимал JSONP.Может кто-нибудь объяснить или отослать меня к лучшему объяснению, пожалуйста?

Спасибо,

- P

1 Ответ

8 голосов
/ 27 июля 2011

Так должен ли XMLHTTPRequest () возвращать только javascript или html?

Он может вернуть любой текст, который вам нравится (и, возможно, двоичные данные, но я никогда не видел, чтобы попытался, поэтому я не буду клясться)

Может ли этоне вернуть чистый документ json?

Может.

Я думал, что та же политика происхождения не применяется к вызову XMLHttpRequest ().

Та же самая политика происхождения наиболее определенно применима к XHR

Почему существует необходимость вставить тег в DOM для вызова стороннего сервера?

Эта же политика источника обходится загрузкой скрипта (со встроенными данными) из другого источника.

Это потому, что вы не читаете удаленный ресурс с помощью JavaScript.Вы выполняете некоторый удаленный JavaScript, который поставляется со встроенными данными.

В конце я вообще не понимал JSONP.Может кто-нибудь объяснить или отослать меня к лучшему объяснению, пожалуйста?

JSON-P просто загружает некоторый JavaScript из другого источника.Этот JavaScript состоит из одного вызова функции (для функции, которую вы определяете перед добавлением элемента <script>) с одним аргументом (литерал объекта или массива JS).

...