#jquery #ajax #json #jsonp #cross-domain-policy
#jquery #ajax #json #jsonp #междоменная политика
Вопрос:
У меня есть обычный канал JSON, который я опрашиваю по URL (normalJSONfeed). Я получаю cross origin policy error
каждый раз. Как я могу изменить $.ajax
функцию, чтобы обойти это ограничение, когда у меня нет никакого способа изменить канал JSON (другими словами, я не могу обернуть канал JSON в вызов функции).
$.ajax({
type : "GET",
dataType : "jsonp",
url : '/normalJSONfeed',
data : {}
success: function(obj){
}
});
Комментарии:
1. Вы не можете, сервер должен фактически отправлять JSONP, вы ничего не можете сделать, чтобы изменить данные на стороне клиента. Вы могли бы использовать свой собственный сервер в качестве прокси-сервера, хотя!
2. AFAIK,
cross origin
не имеет никакого отношения к JSON против VSONP. Это просто означает, что вы пытаетесь запросить URL-адрес, который не находится на том же сервере (протокол домен порт), что и страница, с которой он вызывается.3. @jcaron: Это именно то, для чего используется JSONP.
Ответ №1:
В коде нет ничего, что вы могли бы изменить, только то, что позволяет запрашивать JSON как JSONP. Поскольку запросы JSONP используют тег script для запроса данных, между загружаемыми и обрабатываемыми данными нет точки, на которую вы можете повлиять.
Если вы не можете изменить то, что отправляет сервер, вам нужен промежуточный сервер, который может изменить ответ до его поступления. Я настроил прокси-сервер, который изменяет ответ JSON на ответ JSONP. Запросите страницу прокси и отправьте URL-адрес ресурса, который возвращает JSON в качестве параметра.
Пример:
$.ajax({
dataType : "jsonp",
url : 'http://jsonp.guffa.com/Proxy.ashx?url=' encodeURIComponent('www.someserver.com/normalJSONfeed'),
success: function(obj){
}
});
Комментарии:
1. Блестяще. И я предполагаю, что могу полагаться на ваш прокси-сервер вечно ;)? Нет, серьезно, можно? Кроме того, есть ли какой-либо другой хак или метод, который можно использовать на стороне браузера , чтобы обойти эту политику?
2. @Startec: Я настроил сервер в основном для целей тестирования, но я не планирую его отключать. Вы ничего не можете сделать в браузере, чтобы обойти ту же политику происхождения. Чтобы обойти это, вам нужно, по крайней мере, иметь возможность добавлять файлы на сервер.
3. Я понимаю. Было ли сложно настроить ваш прокси-сервер? Очень хотелось бы знать, как это делается!
4. @Startec: Принцип прост, это просто страница, которая выполняет запрос и возвращает ответ после обертывания его в коде для вызова функции, но получить заголовки и все правильно было немного сложно.