Междоменное использование контента из клиентского скрипта (проблемы безопасности) - PullRequest
1 голос
/ 08 июля 2010

Я пытаюсь загрузить внешний контент с помощью функции загрузки jQuery для div на моей странице. Метод load работает нормально, с локальным контентом, но если вы хотите что-то из вашего домена, он не будет работать.

$("#result").load("http://extrnal.com/page.htm #data);

(на самом деле он работает в IE с предупреждением безопасности, но вообще отказывается работать в Chrome). Документация jQuery говорит, что это правильно, потому что междоменный контент ограничен по соображениям безопасности. То же предупреждение я получу, если использую метод .getJSON.

ОК, немного погуглив, я нашел очень интересный подход с использованием YQL для загрузки контента, я попробовал несколько примеров, таких как:

        var request = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20html%20where%20url%3D%22http%3A%2F%2Ffinance.yahoo.com%2Fq%3Fs%3Dyhoo%22&format=json&diagnostics=true&callback=?";
        $.getJSON(request, function (json) {
            alert(json);
        }
       );

И это действительно работает!

Что я не понимаю сейчас, так это то, что http://query.yahooapis.com также является междоменным ресурсом, но браузер (и IE, и Chrome) работает нормально с этим?

Какая разница? Чего мне не хватает?

Спасибо

Ответы [ 3 ]

0 голосов
/ 08 июля 2010

вы можете сделать на внешнем сайте JSON так:

callback({key:value,etc:1})

и определить

function callback(json) {
   ..here is processing..
}
0 голосов
/ 09 июля 2010

Спасибо за ваши ответы, но, к сожалению, оба они не отвечают на мой оригинальный вопрос ..

Я проверил связанные вопросы по stackoverflow (я знаю, что сначала мне нужно это сделать) и нашел причинутакого поведения.

Первый фрагмент кода использует AJAX / JSON для извлечения данных, и это разрешено из-за единой политики происхождения.Но запрос к YQL вместо этого использует JSONP, это нормально.

JSONP был тем, о чем я не знаю, поэтому я не стал понимать поведение.

Введение в JSONPможно найти здесь: http://ajaxian.com/archives/jsonp-json-with-padding

0 голосов
/ 08 июля 2010

Результаты, которые вы получаете от YQL, представлены в формате JSON, который разрешен для межсайтовых вызовов AJAX, подобных этому.Это тот же механизм, который позволяет вам взаимодействовать с веб-сервисами для внешних сайтов через JSON (т. Е. Twitter API).

Подробности здесь - http://www.wait -till-i.com / 2010/01/10 / загрузка внешнего контента с помощью ajax-using-jquery-and-yql /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...