2010-07-21 2 views
28

Я понимаю, что jsonp - это метод, позволяющий обойти одну и ту же политику происхождения. Вы в основном ссылаетесь на конечную точку сервера обслуживания json в теге скрипта, потому что теги скриптов освобождаются от политики SO.Требуется ли модификация JSONP?

Мой вопрос: Предполагая, что сервер имеет конечную точку, обслуживающую json, есть ли на сервере какие-либо изменения, чтобы использовать jsonp в клиенте? не

Я думаю, что нет, но хочу быть уверен ....

ответ

33

Да, JSONP немного отличается, когда он делает, так что ваш сервер должен поддерживать его.

JSON выглядит следующим образом:

{ "name": "value" } 

В то время как JSONP выглядит следующим образом:

functionName({ "name": "value" }); 

Если все, что вы используете, поддерживает это вы охвачены, но это не то же самое, как поддержка только JSON. Когда сервер получает запрос, например: http://example.com/json?callback=functionName, выше, что вы должны вынести, потому что, как она выглядит на странице это:

<script type="text/javascript" src="http://example.com/json?callback=functionName"></script> 

Это означает то, что работает должен быть возвращен, в качестве иллюстрации, это справедливо:

<script type="text/javascript"> 
    functionName({ "name": "value" }); 
</script> 

Если ваш сервер не поддержка JSONP это будет фактически это:

<script type="text/javascript"> 
    { "name": "value" } 
</script> 

... и вы получите синтаксические ошибки, поскольку это недействительный JavaScript.

+1

и ваш код js должен реализовать functionName? Нужно ли оценивать json для получения объектов js? – hvgotcodes

+0

@hvgotcodes - Да, клиент имеет эту функцию (например, jQuery по умолчанию создает динамически). Это JSON передается функции (JSON - это действительная объектная нотация, просто ее подмножество), поэтому не нужно выполнять 'eval()'. –

+1

Я не понимаю, почему вам не нужно его оценивать. Независимо от jsonp, большинство js-библиотек eval json возвращаются через xhrs для получения реальных js-объектов, которые представляет json? – hvgotcodes