AJAX звонит с локального кода JavaScript на удаленный сервер - PullRequest
2 голосов
/ 13 апреля 2011

Можно ли совершать AJAX-вызовы (например, используя jQuery.ajax ()) из локального файла html / js (например, file: //home/a.html) на удаленный сервер (например, http://domain:8080/api)? Если да, то как включить такой XSS (например, в FF3)?

Я полагаю, это настройки безопасности некоторых браузеров, но я не могу их найти.

И предположим, что есть ответ без каких-либо изменений на стороне сервера (например, JSONP).

Спасибо.

Фрагмент кода:

function foo(){
       $.ajax({
           type: "POST",
           url: "http://localhost:8080/api",
           data: "Hello world",
           success: function (data, textStatus, XMLHttpRequest) {
               alert(data);
               alert("success!");
           },
           error: function(XMLHttpRequest, textStatus, errorThrown) {
               alert("fail");
           }
       });
   }

...
...

<button onclick="foo()">click me</button>

Я получаю "успех", но пустые данные.

Ответы [ 3 ]

3 голосов
/ 13 апреля 2011

К сожалению, нет других способов, кроме как использовать один из 2 методов: либо JSONP, как указано в предыдущих ответах, либо CORS . Оба требуют серверных изменений. JSONP лучше, если вам нужна поддержка старых браузеров, но CORS, очевидно, чище и, скорее всего, не требует изменений серверных сценариев, достаточно изменить конфигурацию сервера.

Надеюсь, это поможет.

0 голосов
/ 13 апреля 2011

JSONP - это путь.Если вы получаете доступ к стороннему API, надеюсь, он уже будет поддерживать его.Если это ваш собственный API, вам, возможно, придется добавить поддержку для него самостоятельно.Вы можете найти, что этот связанный вопрос поможет вам получить некоторую предысторию: Что такое JSONP все о?

0 голосов
/ 13 апреля 2011

Добавьте callback=? в конце вашего URL, который вы передаете ajax

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