Я использую этот код для междоменного вызова ajax, я надеюсь, что он поможет больше, чем один здесь. Я использую библиотеку Prototype, и вы можете сделать то же самое с JQuery, Dojo или чем-то еще:
Шаг 1: создайте новый файл js и поместите этот класс внутрь, я назвал его xss_ajax.js
var WSAjax = Class.create ({
initialize: function (_url, _callback){
this.url = _url ;
this.callback = _callback ;
this.connect () ;
},
connect: function (){
var script_id = null;
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', this.url);
script.setAttribute('id', 'xss_ajax_script');
script_id = document.getElementById('xss_ajax_script');
if(script_id){
document.getElementsByTagName('head')[0].removeChild(script_id);
}
// Insert <script> into DOM
document.getElementsByTagName('head')[0].appendChild(script);
},
process: function (data){
this.callback(data) ;
}
}) ;
Этот класс создает динамический элемент сценария, атрибуты src которого предназначены для вашего поставщика данных JSON (фактически, JSON-P, поскольку ваш удаленный сервер должен предоставлять данные в этом формате :: call_back_function (// json_data_here) ::, поэтому, когда тег сценария Если ваш JSON создан, то он будет напрямую обработан как функция (на шаге 2 мы поговорим о передаче имени метода обратного вызова на сервер), основная идея этого заключается в том, что сценарий, такой как элементы img, не связан с ограничениями SOP.
Step2: на любой html-странице, где вы хотите получить JSON асинхронно (мы называем это AJAJ ~ Asynchronous JAvascript + JSON :-) вместо AJAX, в котором используется объект XHTTPRequest), выполните следующие действия
//load Prototype first
//load the file you've created in step1
var xss_crawler = new WSAjax (
"http://your_json_data_provider_url?callback=xss_crawler.process"
, function (_data){
// your json data is _data and do whatever you like with it
}) ;
Вы помните обратный вызов на шаге 1? поэтому мы передаем его на сервер, и он возвращает JSON, внедренный в этот метод, поэтому в нашем случае сервер вернет корректный код javascript xss_crawler.process (// the_json_data), помните, что xss_crawler является экземпляром класса WSAjax. Код сервера зависит от вас (если он ваш), но большинство провайдеров данных Ajax позволяют указывать метод обратного вызова в параметрах, как мы.
В Ruby на рельсах я просто сделал
render :json=>MyModel.all(:limit=>10), :callback => params[:callback],:content_type => "application/json"
и все, теперь вы можете извлекать данные из другого домена из ваших приложений (виджетов, карт и т. Д.), Только в формате JSON, не забывайте.
Я надеюсь, что это было полезно, спасибо за ваше терпение :-), мир и простите за форматирование кода, это не работает хорошо