Кросс-домен Ajax-запрос с JQuery / PHP

Помогите, если вы можете –

Ситуация:

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, я должен быть в состоянии выполнить это.

Solutions Collecting From Web of "Кросс-домен Ajax-запрос с JQuery / PHP"

Ошибка, похоже, является функцией безопасности политики одинакового происхождения : для упрощения вы можете делать запросы 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 и отправляет его обратно в браузер) ,

В браузер запрос отправляется на исходный сервер и разрешен (браузер не знает, что ответ приходит откуда-то за сценой).

Предостережения:

  • в конфигурации PHP на foobar.com должен быть установлен параметр allow_url_fopen на «1». Хотя это значение по умолчанию, некоторые серверы отключены.
  • запрос на http://www.boobar.com сделан на сервере foobar.com, а не в браузере. Это означает, что никакие файлы cookie или данные аутентификации пользователей не отправляются на сайт http://www.boobar.com, как бы вы ни размещали URL-адрес запроса (« $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)