Междоменный запрос Ajax с JQuery / PHP - PullRequest
4 голосов
/ 15 апреля 2009

Помогите, если сможете -

Ситуация:

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

Ответы [ 6 ]

8 голосов
/ 15 апреля 2009

Ошибка, по-видимому, является функцией безопасности Same Origin Policy : для упрощения вы можете только делать запросы 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». Хотя это настройка по умолчанию, на некоторых серверах она отключена.
  • запрос к www.boobar.com сделан с сервера foobar.com , а не из браузера. Это означает, что файлы cookie или данные аутентификации пользователя не отправляются на сайт www.boobar.com, все, что вы указали в URL запроса ("$possibly_some_other_GET_parameters").
4 голосов
/ 15 апреля 2009

Вы можете получить данные с другого сервера асинхронно, используя теги script и json:

<script type="text/javascript" src="http://somesite.com/path/to/page/"></script>

Вы можете использовать это для динамической загрузки удаленного javascript (путем создания нового элемента script и установки атрибута src, а затем загрузки в DOM), который может установить переменную. Однако вам действительно нужно доверять удаленному сайту, потому что JS будет оцениваться без каких-либо предварительных условий .

1 голос
/ 15 апреля 2009

Существует метод с именем window.name transport или window.name method, который использует общую ошибку браузера (не уверен, действительно ли это ошибка). Вы делаете запрос через iFrame, и загруженная страница помещает необходимую информацию в свойство «name» самого оконного объекта JavaScript.

В этом методе используется «blank.htm», так как он сначала переходит на целевую страницу, а затем возвращается на страницу blank.htm, чтобы преодолеть ограничение «той же политики происхождения».

Dojo реализовал это, и вы можете найти более подробное объяснение здесь .

Также я реализовал междоменный объект XMLHttpRequest на основе этого метода в написанной мной библиотеке, которую можно найти здесь .

Возможно, вы не сможете использовать библиотеку, поскольку для нее потребуется 1 или 2 дополнительные библиотеки, которые можно найти здесь .

Если вам понадобится дополнительная помощь в реализации этого в вашем стиле, я постараюсь сделать все возможное.

0 голосов
/ 09 апреля 2013

jQuery .ajax также имеет настройку 'crossDomain'.

http://api.jquery.com/jQuery.ajax/

crossDomain (default: false for same-domain requests, true for cross-domain requests)
Type: Boolean
If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain. (version added: 1.5)
0 голосов
/ 11 декабря 2009

Как насчет этого !! Использование php прокси.

Междоменные вызовы AJAX с использованием PHP http://www.phpfour.com/blog/2008/03/cross-domain-ajax-using-php/

0 голосов
/ 16 апреля 2009

Итак, что я в итоге сделал, так как это был просто GET - не нужно извлекать данные - я использовал JQuery для создания скрытого iframe с URL-адресом, включающим переменные, которые я хотел передать, в качестве источника. Работал как шарм. Всем, кто предоставил отзыв - Спасибо!

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