Помогите, если вы можете –
Ситуация:
http://foobar.com включает удаленно размещенный файл javacript ( http://boobar.com/stuff.js ).
Цель состоит в том, чтобы просто получить предупреждение от удаленного php-скрипта на foobar.com
Я пробовал следующий код в stuff.js:
$.ajax({ type: "GET", url: "http://www.boobar.com/script.php?callback=?", dataType: 'jsonp', success: function(result) { alert(result); } });
Не повезло.
$.getJSON("http://www.boobar.com/script.php?jsonp=?", function(data) { alert(data); } );
Также не повезло.
На стороне php я попробовал следующее:
return json_encode(array(0 => 'test')); echo json_encode(array(0 => 'test'));
В Firefox я получаю сообщение об ошибке безопасности. Я понимаю, что он считает, что я нарушаю модель безопасности. Однако, согласно документации jquery, я должен быть в состоянии выполнить это.
Ошибка, похоже, является функцией безопасности политики одинакового происхождения : для упрощения вы можете делать запросы AJAX только на исходном сервере ( http://foobar.com
). Один из способов – сделать простой фасад на исходном сервере, например:
<?php // this file resides at http://foobar.com/getstuff.php echo file_get_contents('http://www.boobar.com/script.php?callback=?' . $possibly_some_other_GET_parameters ); ?>
Затем, с foobar.com, вы можете сделать запрос AJAX для http://foobar.com/getstuff.php
(который, в свою очередь, делает запрос HTTP GET с вашего веб-сервера на boobar.com
и отправляет его обратно в браузер) ,
В браузер запрос отправляется на исходный сервер и разрешен (браузер не знает, что ответ приходит откуда-то за сценой).
Предостережения:
allow_url_fopen
на «1». Хотя это значение по умолчанию, некоторые серверы отключены. $possibly_some_other_GET_parameters
»). Вы можете получать данные с другого сервера асинхронно с помощью тегов сценариев и json:
<script type="text/javascript" src="http://somesite.com/path/to/page/"></script>
Вы можете использовать это для динамической загрузки удаленного javascript (путем создания нового элемента сценария и установки атрибута src, а затем загрузки в DOM), который мог бы установить переменную. Однако вам действительно нужно доверять удаленному сайту, потому что JS будет оцениваться без каких-либо предварительных условий .
Существует метод под названием window.name transport
или window.name method
который использует общую ошибку браузера (не уверен, что это ошибка на самом деле). Вы делаете запрос через iFrame, и загруженная страница помещает необходимую вам информацию в свойство «name» самого объекта окна JavaScript.
Этот метод использует «blank.htm», поскольку он сначала переходит на целевую страницу, а затем возвращается на страницу blank.htm, чтобы преодолеть ограничение «того же принципа происхождения».
Dojo внедрили это, и вы можете найти более подробное объяснение здесь .
Кроме того, я реализовал междоменный объект XMLHttpRequest на основе этого метода в написанной мной библиотеке, которую можно найти здесь .
Возможно, вы не сможете использовать библиотеку, так как для этого потребуется 1 или 2 дополнительных библиотеки, которые можно найти здесь .
Если вам нужна дополнительная помощь в ее реализации в вашем стиле, я постараюсь сделать все возможное.
Так что я закончил делать, так как это был просто GET – данные не нужно извлекать – я использовал JQuery для создания скрытого iframe с URL-адресом, включая переменные, которые я хотел передать установленным как источник. Работал как шарм. Всем, кто подал обратную связь – Спасибо!
Как насчет этого !! Использование php-прокси.
Междоменные звонки AJAX с использованием PHP http://www.phpfour.com/blog/2008/03/cross-domain-ajax-using-php/
jQuery .ajax также имеет настройку 'crossDomain'.
http://api.jquery.com/jQuery.ajax/
crossDomain (по умолчанию: false для запросов одного домена, true для междоменных запросов) Тип: Boolean Если вы хотите принудительно выполнить запрос crossDomain (например, JSONP) в том же домене, установите для параметра crossDomain значение true. Это позволяет, например, перенаправить серверную сторону в другой домен. (добавлена версия: 1.5)