Отправка данных JSONP или JSON?

Я делаю веб-сервис, который должен возвращать данные в формате JSONP. Я использую taglib JSON для JSP, и я думал, что все, что нужно было добавить, это круглые скобки, но я не могу найти хороший ресурс, который это подтверждает.

Например, когда-либо функция веб-службы возвращает значение, используя эту функцию:

private static String getJSONPObject(String s) throws JSONException {
    return "(" + new JSONObject(s) + ")";
}

Это правильно?

Спасибо!


person Garrett    schedule 13.01.2011    source источник


Ответы (2)


JSONP — это просто хак, позволяющий веб-приложениям извлекать данные из разных доменов. Можно сказать, что это нарушает Политику единого происхождения (SOP). Это работает с использованием Javascript для вставки элемента «сценарий» на вашу страницу. Поэтому вам нужна функция обратного вызова. Если бы у вас его не было, у вашего Javascript не было бы доступа к объекту JSON. Но с помощью JSONP ваш код Javascript может вызывать функцию обратного вызова.

Таким образом, вы должны указать имя обратного вызова. Итак, ваша функция может выглядеть так:

private static String getJSONPObject(String callback, String s) throws JSONException {
    return callback + "(" + new JSONObject(s) + ")";
}
person JP Richardson    schedule 13.01.2011
comment
У вас должен быть доступ к объекту http-запроса или, по крайней мере, какой-либо способ доступа к отправленному обратному вызову, обычно в такой форме: example.com?callback=name123 - person Abdullah Jibaly; 13.01.2011
comment
Да, и чтобы расширить точку зрения Абдуллы, ваш код Javascript должен затем вызвать функцию name123, чтобы получить JSON. - person JP Richardson; 13.01.2011
comment
ах, спасибо, теперь я понимаю обратный вызов. однако я не уверен, как получить его в веб-службе. я мог бы запросить его в качестве параметра в моей функции, но это не кажется таким удобным для пользователя, как возможность анализировать его в ссылке, как показал Абдулла. в частности, это используется внутри класса, и веб-служба позволяет получить доступ к этим методам. можно ли использовать объект запроса внутри класса? - person Garrett; 13.01.2011
comment
example.com?callback=name123 вызовет ваш сервлет JSP, который, в свою очередь, вызовет функцию getJSONPObject и передаст name123 в качестве параметра обратного вызова. - person JP Richardson; 13.01.2011

Я добавил один пример для обращения к междоменному JSONP (Json с дополнением) с помощью Jquery и Servlet или веб-службы JAX-WS.

Пожалуйста, проверьте эту статью.
http://reddymails.blogspot.com/2012/05/solving-cross-domain-problem-using.html

person Reddymails    schedule 21.09.2012