Есть ли какая-либо спецификация, говорящая о том, что все еще считается действительным JSONP? - PullRequest
2 голосов
/ 30 января 2012

Мне нужно проанализировать сообщения JSONP в .NET и найти JSON в этих сообщениях. Существует ли какая-либо актуальная спецификация, описывающая действительное сообщение JSONP?

Я нашел эту запись в блоге (из 2005 г.) Боба Ипполито, в которой указано первое предложение JSONP, где сообщение JSONP может содержать практически любой код JavaScript.

Я также нашел, вероятно, более свежую спецификацию на json-p.org, разрешающую только вызовы функций для функций, указанных в запрашивающем параметре URI с именем callback.

Наконец Википедия говорит:

Хотя заполнение (префикс) обычно является именем обратного вызова функция, которая определена в контексте выполнения браузера, это также может быть присвоение переменной, оператор if или любой другой Заявление JavaScript. Ответ на запрос JSONP (а именно, запрос в соответствии с шаблоном использования JSONP) не является JSON и не анализируется как JSON; возвращаемая полезная нагрузка может быть произвольным JavaScript выражение, и он не должен включать в себя JSON вообще. Но условно это фрагмент JavaScript, который вызывает функцию вызовите некоторые данные в формате JSON.

Итак, существует ли какое-либо глобальное определение, которое дает правильный ответ JSONP и какие конструкции JavaScript разрешены? Стоит ли ожидать какой-либо код JavaScript, потому что это то, что принимают нынешние браузеры (потому что он имеет application/javascript тип контента)?

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Это может быть буквально любой допустимый JavaScript, потому что он добавляет новый тег сценария на страницу.Причина, по которой вы видите callback({...JSON...}), заключается в том, что она вызывает функцию обратного вызова, которую вы передали в URL тега script.Однако вы можете поместить в одну полезную нагрузку все вызовы функций и другие вещи всего веб-приложения.

Вам следует взглянуть на Cross-Origin Resource Sharing как альтернативу JSONP.Он позволяет обычному AJAX общаться напрямую между источниками, используя несколько заголовков HTTP.Это отличная альтернатива JSONP, которая придерживается ограничений запроса GET (ограничение URL-адреса в 2083 символа в большинстве, если не во всех версиях IE).

2 голосов
/ 30 января 2012

Поскольку JSONP является шаблоном, а не языком (как в случае с JSON), стандарта не существует.

Это имя подразумевает, что вы получите действительный объект JSON, обернутый в вызов функции.

Действительно, «спецификация», которая говорит вам, что будет включено в ответ, должна быть чем-то для API , на который вы подписываетесь на документ .

...