Làm cách nào để sử dụng đúng cách jQuery trì hoãn trả về hàm cho đến khi cuộc gọi không đồng bộ trong hàm hoàn thành + nhận giá trị trả về?jQuery hoãn lại: sử dụng để trì hoãn trả về hàm cho đến khi cuộc gọi không đồng bộ trong hàm hoàn thành + nhận giá trị trả lại
Đây là mã hiện tại của tôi:
function getFields(page)
{
var dff = $.Deferred();
result = {};
$.ajax(//the async call
{
url: page,
success:
function (data)
{
//work out values for field1 & field 2 from data here
result =
{
'field1' : field1,
'field2' : field2
};
},
complete:
function()
{
dff.resolve(result); //my attempt to return the result
}
}
);
return dff.promise();
}
Tôi muốn này để in { "field1": "value1", "field2": "value2"}
var result = getFields('http://something');
console.log(JSON.stringify(result));
Tuy nhiên, giá trị kết quả dường như là một đối tượng jQuery - vì vậy tôi đang làm điều gì sai, nhưng cái gì?
Cảm ơn!
P.S. Xin lỗi cho câu hỏi newbie, tôi là người dùng lần đầu tiên bị trì hoãn, vì vậy tôi vẫn đang nắm bắt các khái niệm cơ bản.
@ Sly_caridnal: +1 và kiểm tra - giải thích tuyệt vời! – bguiz
Oooh, đẹp ... Gói 'dff.resolve (dữ liệu);' trong một 'setTimeout' là một cách nhanh chóng và dễ dàng để mô phỏng một cuộc gọi ajax chậm (vì những gì tôi đang thử nghiệm không nhất quán kết thúc trước hoặc sau một cuộc gọi ajax thứ hai) – Izkata
Có một cách thực sự: thay đổi câu lệnh trả về của hàm getFields (trang) 'như' return dff.promise(). getState() == 'resolve'' Nó sẽ tạm dừng cho đến khi giải quyết hoặc từ chối xảy ra. Tất nhiên bạn chỉ có thể trả lại đối tượng lời hứa và kiểm tra trạng thái ở một nơi khác. – shuangwhywhy