JQUERY Автозаполнение с использованием PHP и межсайтовая проблема - PullRequest
3 голосов
/ 09 марта 2010

Я пытаюсь загрузить ряд городов / стран в текстовое поле для отображения с помощью автозаполнения jquery. Для этого я присоединяю автозаполнение к текстовому полю и вызываю процедуру PHP с именем SEARCH.php. Это работает нормально, если ПОИСК находится на том же сервере.

Когда я пытаюсь вызвать поиск с другого сервера (в данном случае, с сервера ASP), я получаю ошибку JavaScript PERMISSION DENIED, я полагаю, из-за проблемы кросс-скриптинга. Проблема вызвана линией

xhr.open (тип, s.url, s.async);

в jquery1.2.2

Есть ли какое-нибудь решение для этого?

Спасибо за любую помощь

Ответы [ 2 ]

3 голосов
/ 09 марта 2010

Я предполагаю, что ваши серверы PHP и ASP работают в другом (суб) домене - если это так, то вы правильно предполагаете, что это ограничение междоменного скриптинга, как определено стандартами Javascript.

Насколько я знаю, не существует чистого решения Javascript с хорошей кросс-браузерной совместимостью (некоторые браузеры могут иметь более мягкие ограничения). В долгосрочной перспективе мы все можем надеяться, что это будет решено с помощью общего доступа к ресурсам, который определяется как часть HTML5:
http://www.w3.org/TR/access-control/

Способы как обойти это сегодня :

  1. Использование серверного прокси-скрипта
    Вы можете создать новый скрипт на вашем PHP-сервере (т.е. ASP-Proxy.php), который будет извлекать данные с ASP-сервера. Это позволит вам избежать междоменного ограничения, поскольку скрипт PHP будет находиться на том же сервере, что и скрипт Search.php, который, как вы подтвердили, работает правильно.
    Google показал эту очень простую реализацию, но есть много более надежных и / или безопасных сценариев.

  2. Использование Flash для выполнения запроса
    Flash имеет собственный механизм для обработки междоменных запросов, поэтому вы можете использовать небольшой объект Flash на своем сайте в качестве клиентского боковой прокси для вашего скрипта jQuery. Я не разработчик Flash, поэтому кто-то еще должен будет посоветовать здесь:
    http://www.google.com/search?q=flxhr+jquery

    Обратите внимание, что вам может потребоваться создать файл междоменной политики в корне вашего ASP-сервера, чтобы это работало:
    http://www.google.com/search?q=crossdomain.xml

1 голос
/ 09 марта 2010

Самое простое решение - заставить скрипт на вашем сервере вызвать скрипт другого сервера и затем вернуть результаты с вашего сервера.

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