Как получить данные с кросс-сайта?Я использую $ .post - PullRequest
1 голос
/ 01 февраля 2012

Я тестирую код JavaScript, который находится на localhost. Этот файл требует данных с удаленного сервера в формате JSON. Когда я непосредственно нажимаю на URL JSON, я получаю данные, но в javascript я получаю пустой ответ.

В чем может быть причина? Я использую jquery post метод для получения данных.

Ответы [ 6 ]

2 голосов
/ 01 февраля 2012

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

Взгляните на этот быстрый совет для междоменного запроса AJAX с YQL.

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-cross-domain-ajax-request-with-yql-and-jquery/

1 голос
/ 01 февраля 2012

запрашиваемый сервер должен поддерживать JSONP или CORS .

В противном случае это невозможно.

Также невозможно сделать запрос JSONP, используя POST, это должно быть GET

1 голос
/ 01 февраля 2012

Запрос данных из другого домена ограничен из соображений безопасности (см. CORS ), особенно для предотвращения атак XSS (межсайтовый скриптинг).

Выможно попробовать несколько альтернатив:

  • JSONP - вариант, если другой домен поддерживает его
  • здесь другой соответствующий вопрос

Вы можете использовать YQL для запроса ресурсов из другого домена.

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

1 голос
/ 01 февраля 2012

Существует защитная мера, настроенная с помощью JavaScript, которую вы должны изучить.Это та же политика происхождения.По сути, это означает, что если вы хотите сделать XmlHttpRequest для данных с сервера, который не имеет того же происхождения, что и страница, на которой вы находитесь, вы не сможете этого сделать, если не перепрыгнете через скачки.-P или методы jQuery для преодоления этого.

1 голос
/ 01 февраля 2012

$.post - это метод ajax, и вы не можете использовать методы ajax для доступа к данным из другого источника.

Подробнее см. в документации jQuery :

Из-за ограничений безопасности браузера большинство запросов «Ajax» подчиняются одной и той же политике происхождения;запрос не может успешно получить данные из другого домена, субдомена или протокола.

0 голосов
/ 01 февраля 2012

Как уже говорили другие, вы не можете использовать AJAX для доступа к удаленному серверу. Вы должны использовать JSONP. Если у вас нет контроля над другим сервером или если другой сервер не предлагает JSONP, вы должны использовать прокси.

Это действительно легко написать на PHP. http://www.betavine.net/bvportal/blog/view.html?blogId=101&postId=ff8080811afe49d3011afe4bb5de0003

<?
ob_start();

$url = $_REQUEST['url'];
$curl_handle = curl_init($url);
curl_setopt($curl_handle, CURLOPT_HEADER, 0);
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, "Owen's AJAX Proxy");

$content = curl_exec($curl_handle);
$content_type = curl_getinfo($curl_handle, CURLINFO_CONTENT_TYPE);
curl_close($curl_handle);
header("Content-Type: $content_type");
echo $content;
ob_flush();
?>
...