Как я могу использовать $.ajax для получения обычного JSON как JSONP?

У меня есть обычный канал JSON, который я опрашиваю по URL-адресу (normalJSONfeed). Я получаю cross origin policy error каждый раз. Как я могу изменить функцию $.ajax, чтобы обойти это ограничение, если у меня нет возможности изменить ленту JSON (другими словами, я не могу включить ленту JSON в вызов функции).

$.ajax({
    type : "GET",
    dataType : "jsonp",
    url : '/normalJSONfeed',
    data : {}
    success: function(obj){

    }
});

person Startec    schedule 28.06.2014    source источник
comment
Вы не можете, сервер должен фактически отправить JSONP, вы ничего не можете сделать, чтобы изменить данные на стороне клиента. Вы можете использовать свой собственный сервер в качестве прокси!   -  person adeneo    schedule 29.06.2014
comment
Насколько я знаю, cross origin не имеет никакого отношения к JSON и VSONP. Это просто означает, что вы пытаетесь запросить URL-адрес, который находится не на том же сервере (протокол+домен+порт), что и страница, с которой он вызывается.   -  person jcaron    schedule 29.06.2014
comment
@jcaron: именно для этого используется JSONP.   -  person Guffa    schedule 29.06.2014


Ответы (1)


Вы ничего не можете изменить в коде, кроме того, что позволяет запрашивать JSON как JSONP. Поскольку запросы JSONP используют тег скрипта для запроса данных, между загрузкой данных и их обработкой нет точки, в которой вы могли бы на них повлиять.

Если вы не можете изменить то, что отправляет сервер, вам нужен промежуточный сервер, который может изменить ответ до его поступления. Я настроил прокси-сервер, который изменяет ответ JSON на ответ JSONP. Запросите прокси-страницу и отправьте URL-адрес ресурса, который возвращает JSON в качестве параметра.

Пример:

$.ajax({
    dataType : "jsonp",
    url : 'http://jsonp.guffa.com/Proxy.ashx?url=' + encodeURIComponent('www.someserver.com/normalJSONfeed'),
    success: function(obj){

    }
});
person Guffa    schedule 28.06.2014
comment
Блестящий. И я предполагаю, что могу всегда полагаться на ваш прокси-сервер ;)? Нет серьезно, можно? Кроме того, есть ли какие-либо другие приемы или приемы, которые можно использовать на стороне браузера , чтобы обойти эту политику? - person Startec; 29.06.2014
comment
@Startec: я настроил сервер в основном для тестирования, но не планирую его отключать. Вы ничего не можете сделать в браузере, чтобы обойти ту же политику происхождения. Чтобы обойти это, вам нужно как минимум иметь возможность добавлять файлы на сервер. - person Guffa; 29.06.2014
comment
Я понимаю. Сложно ли было настроить прокси? Очень хотелось бы узнать, как это делается! - person Startec; 29.06.2014
comment
@Startec: Принцип прост, это просто страница, которая выполняет запрос и возвращает ответ после его включения в код для вызова функции, но получить заголовки и все правильно было немного сложно. - person Guffa; 29.06.2014