Припустимо таку структуру каталогів:
/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" запити не підтримують синхронну операцію.