Có thể đặt async: false
khi gọi $.getJSON()
để cuộc gọi chặn thay vì không đồng bộ không?
Có thể đặt async: false
khi gọi $.getJSON()
để cuộc gọi chặn thay vì không đồng bộ không?
Câu trả lời:
Bạn cần thực hiện cuộc gọi bằng cách sử dụng $.ajax()
nó một cách đồng bộ, như sau:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
Điều này sẽ phù hợp với hiện đang sử dụng $.getJSON()
như thế này:
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
tùy chọn để biến nó thành một bài đăng - mặc dù bạn không muốn sử dụng async: false
trừ khi bạn thực sự cần - nó sẽ khóa giao diện người dùng.
Cả hai câu trả lời đều sai. Bạn có thể. Bạn cần gọi
$.ajaxSetup({
async: false
});
trước cuộc gọi ajax json của bạn. Và bạn có thể đặt nó thành true sau khi gọi lại (nếu có các cách sử dụng ajax khác trên trang nếu bạn muốn chúng không đồng bộ)
$.ajax
(và các trình bao bọc viết tắt tiếp theo $.getJSON
, tức là $.get
, v.v.) để được đồng bộ. Hơn nữa, tài liệu thậm chí còn đề xuất không sử dụng điều này: "Mô tả: Đặt giá trị mặc định cho các yêu cầu Ajax trong tương lai. Việc sử dụng nó không được khuyến khích."
Trong trường hợp của tôi, Jay D đúng. Tôi phải thêm điều này trước khi cuộc gọi.
$.ajaxSetup({
async: false
});
Trong mã trước đây của tôi, tôi có cái này:
var jsonData= (function() {
var result;
$.ajax({
type:'GET',
url:'data.txt',
dataType:'json',
async:false,
success:function(data){
result = data;
}
});
return result;
})();
alert(JSON.stringify(jsonData));
Nó hoạt động tìm. Sau đó, tôi thay đổi thành
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Cảnh báo là không xác định.
Nếu tôi thêm ba dòng đó, cảnh báo sẽ hiển thị lại dữ liệu.
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
Tôi không nghĩ rằng bạn có thể đặt tùy chọn đó ở đó. Bạn sẽ phải sử dụng jQuery.ajax () với các tham số thích hợp (về cơ bản getJSON cũng chỉ gói lời gọi đó thành một API dễ dàng hơn).
Cuộn ví dụ của riêng bạn
function syncJSON(i_url, callback) {
$.ajax({
type: "POST",
async: false,
url: i_url,
contentType: "application/json",
dataType: "json",
success: function (msg) { callback(msg) },
error: function (msg) { alert('error : ' + msg.d); }
});
}
syncJSON("/pathToYourResouce", function (msg) {
console.log(msg);
})