假設以下目錄結構:Syncrhonous跨域AJAX請求
/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。到目前爲止,我已經採取了看看Access to restricted URI denied「 code: 」1012 - Cross domain Ajax request和Access to restricted URI denied code: 1012。第一個鏈接建議我使用jQuery的getJSON方法,但此方法只能異步工作。第二個鏈接建議某種JSONP回調,但我一直無法理解這些工作如何。
請注意,如果我將example.json移動到/web/example.json中,這個問題很容易消失,但我想避免這種情況是由於我的實際問題(我在這裏提出的是簡化我的實際問題)。
編輯:我想這個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);
}
});
爲什麼它需要同步?爲什麼不直接延遲特定代碼的執行直到回調函數被觸發? –
使用AJAX的原因是因爲它是異步的。原因是當你使它同步時丟失:( –
@Vega我使用AJAX的原因是因爲它可以加載我的JSON數據,而不是因爲它是異步的。如果有替代品也可以加載我的JSON數據,我會 – abw333