Как вызвать междоменный веб-API с помощью AJAX? - PullRequest
6 голосов
/ 27 марта 2012
jQuery.ajax({
           type: "GET",
           url: 'http://example.com/restaurant/VeryLogin(username,password)',
           dataType: "json",

           success: function (data) {
               alert(data);
           },
           error: function (XMLHttpRequest, textStatus, errorThrown) {
               alert("error");
           }
       });

оповещение об успехе, но данные были нулевыми. URL возвращает данные XML, если мы укажем dataType, мы сможем получить данные JSON, но здесь он не получал никаких данных.

Любая помощь приветствуется.

Ответы [ 4 ]

9 голосов
/ 27 марта 2012

Javascript подчиняется той же политике домена. Это означает, что для безопасности JS-скрипт в клиентском браузере может получить доступ только к тому же домену, с которого он пришел.

На JSONP не распространяются те же ограничения.

Проверьте документы jQuery на JSONP здесь:

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

Вот рабочий пример использования JSONP для доступа к междоменной службе через JQuery AJAX:

http://jsbin.com/idasay/4

И на всякий случай, JSBIN удалит эту вставку в будущем:

jQuery.ajax({
     type: "GET",
     url: 'http://api.geonames.org/postalCodeLookupJSON?postalcode=6600&country=AT&username=demo',
     dataType: "jsonp",
     cache: false,
     crossDomain: true,
     processData: true,


     success: function (data) {
         alert(JSON.stringify(data));
     },
     error: function (XMLHttpRequest, textStatus, errorThrown) {
         alert("error");
     }
 });
2 голосов
/ 27 марта 2012

Невозможно использовать Ajax для непосредственного получения междоменных данных без изменения серверной части.Она называется Та же политика происхождения .

Вы можете установить специальный заголовок Access-Control-Allow-Origin в бэкэнде ( как сделать это ).Или вы можете использовать JSONP .

0 голосов
/ 20 июля 2014

Вот фантастическая статья о междоменных вызовах GET и POST: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Это мне очень помогло .... снимать комментарии для любого запроса.

0 голосов
/ 27 марта 2012

Найдите тип данных jsonp.

jQuery.ajax({
       type: "GET",
       url: 'http://xxx.com/restaurant/VeryLogin(username,password)',
       dataType: "jsonp",
   cache: false,
       crossDomain: true,
   processData: true,

       success: function (data) {
           alert(data);
       },
       error: function (XMLHttpRequest, textStatus, errorThrown) {
           alert("error");
       }
   });
...