/ / Syncrhonous міждоменний запит AJAX - javascript, jquery, ajax, json, крос-домен

Запит синхронного крос-домену AJAX - javascript, jquery, ajax, json, cross-domain

Припустимо таку структуру каталогів:

/web
example.html
example.js
/example.json

Я відкриваю example.html у своєму браузері і він запускає example.js, який намагається синхронно завантажувати дані в example.json, використовуючи наступний виклик:

$.ajax({url: "file:///example.json",
dataType: "json",
async: false,
success: function(data) {
console.log(data)
},
error: function(request, status, error) {
console.log(request);
console.log(status);
console.log(error);
}
});

Це призводить до помилки з повідомленням "Доступ до обмеженого URI заборонено" та кодом помилки 1012. Поки я переглянув У доступі до обмеженого URI відмовлено "код:" 1012 - Запит між доменом Ajax і Код відхилений у доступі до обмеженого URI: 1012. Перше посилання запропонувало мені використовувати jQuery "s getJSON метод, але цей метод працює лише асинхронно. Друга посилання говорить про якийсь зворотний виклик JSONP, але я не зміг зрозуміти, як саме вони працюють.

Зауважте, що ця проблема легко минає, якщо я рухаюсяexample.json /web/example.json, але я хотів би цього уникнути через деякі обставини моєї реальної проблеми (я тут представив - це спрощення моєї реальної проблеми).

EDIT: Я пробую цей код JSONP, але я все ще стикаюся з тією ж помилкою:

$.ajax({url: "file:///example.json",
dataType: "jsonp",
success: function(data) {
console.log(data)
},
error: function(request, status, error) {
console.log(request);
console.log(status);
console.log(error);
}
});

Відповіді:

0 для відповіді № 1

За замовчуванням міждоменні запити AJAX заборонені. Вам потрібен дозвіл іншого сервера, що використовує CORSабо ви можете використовувати JSONP.


0 для відповіді № 2

Ваші міркування щодо використання синхронного ajax неправильно керовані. Якщо ви хочете зачекати, поки всі запити ajax завершаться, скористайтеся наступною методологією.

var ajaxRequest1 = $.ajax();
var ajaxRequest2 = $.ajax();
var ajaxRequest3 = $.ajax();
$.when(ajaxRequest1, ajaxRequest2, ajaxRequest3).done(function(){});

Це буде набагато ефективніше / швидше, ніж виконання серії синхронних запитів ajax всередині циклу.


0 для відповіді № 3

Запити між доменами та dataType: "jsonp" запити не підтримують синхронну операцію.

Подивіться тут документацію.