jQuery.ajax не работает, когда URL-адрес с другого сервера - PullRequest
11 голосов
/ 29 июля 2009

Почему jQuery.ajax () выдает ошибку без сообщения об ошибке, если вы используете URL с другим сервером?

Ответы [ 4 ]

11 голосов
/ 29 июля 2009

Это из-за ограничения на междоменные запросы, реализованные в браузере для XMLHttpRequests. Вы можете обойти это, используя JSONP в качестве формата, в противном случае вам понадобится серверный прокси для запроса.

Цитирование из документации ajax в http://jquery.com

Примечание: все пульты (не на одном домен) запросы должны быть указаны как получить, когда «скрипт» или «JSONP» является dataType (потому что он загружает скрипт используя тег сценария DOM). Параметры Ajax которые требуют объект XMLHttpRequest недоступны для этих запросов. Полные и успешные функции вызывается по завершении, но не получить объект XHR; предыдущая отправка и функции dataFilter не являются называется.

6 голосов
/ 01 марта 2013

Как http://en.wikipedia.org/wiki/Cross-origin_resource_sharing говорит:

Обмен ресурсами между источниками (CORS) - это механизм, позволяющий веб-странице отправлять запросы XMLHttp в другой домен. 1 В противном случае такие запросы между доменами были бы запрещены веб-браузерами, в соответствии с той же политикой безопасности происхождения. CORS определяет, каким образом браузер и сервер могут взаимодействовать, чтобы определить, разрешить или нет запрос на отправку из разных источников. 2 Это более мощный инструмент, чем только запросы из одного источника, но он более безопасный чем просто разрешить все такие запросы из разных источников.

Для PHP это делается с использованием header () function:

<?php
header("Access-Control-Allow-Origin: http://example.com");
?>

CORS может использоваться как современная альтернатива шаблону JSONP. В то время как JSONP поддерживает только метод запроса GET, CORS также поддерживает другие типы HTTP-запросов. Использование CORS позволяет веб-программисту использовать обычный XMLHttpRequest, который поддерживает лучшую обработку ошибок, чем JSONP. С другой стороны, JSONP работает на старых браузерах, которые исключить поддержку CORS. CORS поддерживается большинством современных веб-браузеров. Кроме того, хотя JSONP может вызвать проблемы XSS, когда внешний сайт Скомпрометировано, CORS позволяет веб-сайтам вручную анализировать ответы обеспечить безопасность.

JSONP или «JSON with padding» - это метод связи, используемый в JavaScript. Он предоставляет метод для запроса данных с сервера в другой домен, что запрещено обычными веб-браузерами, потому что той же политики происхождения.

2 голосов
/ 29 июля 2009

Метод ajax () внутри использует XmlHttpRequest, который подчиняется той же политике домена http://en.wikipedia.org/wiki/Same_origin_policy. Вместо этого можно использовать метод getJson () для выполнения междоменных вызовов.

Надеюсь, это поможет, Богдан

0 голосов
/ 29 июля 2009

Потому что если такая же политика происхождения, jQuery не допустит этого. Наилучшим вариантом будет использование страницы прокси-сервера для получения нужных страниц.

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