Tôi đã sử dụng câu trả lời do Carcione đưa ra và sửa đổi nó để sử dụng JSON.
function getUrlJsonSync(url){
var jqxhr = $.ajax({
type: "GET",
url: url,
dataType: 'json',
cache: false,
async: false
});
// 'async' has to be 'false' for this to work
var response = {valid: jqxhr.statusText, data: jqxhr.responseJSON};
return response;
}
function testGetUrlJsonSync()
{
var reply = getUrlJsonSync("myurl");
if (reply.valid == 'OK')
{
console.dir(reply.data);
}
else
{
alert('not valid');
}
}
Tôi được thêm vào datatype của 'JSON' và thay đổi .responseText để responseJSON .
Tôi cũng đã lấy trạng thái bằng cách sử dụng thuộc tính statusText của đối tượng được trả về. Lưu ý rằng đây là trạng thái của phản hồi Ajax, không phải là liệu JSON có hợp lệ hay không.
Back-end phải trả về phản hồi trong JSON chính xác (được định dạng tốt), nếu không, đối tượng được trả lại sẽ không được xác định.
Có hai khía cạnh để xem xét khi trả lời câu hỏi ban đầu. Một người đang bảo Ajax thực hiện đồng bộ (bằng cách đặt async: false ) và người kia đang trả lời phản hồi thông qua câu lệnh trả về của hàm gọi, thay vì vào hàm gọi lại.
Tôi cũng đã thử nó với POST và nó hoạt động.
Tôi đã thay đổi GET thành POST và thêm dữ liệu: postdata
function postUrlJsonSync(url, postdata){
var jqxhr = $.ajax({
type: "POST",
url: url,
data: postdata,
dataType: 'json',
cache: false,
async: false
});
// 'async' has to be 'false' for this to work
var response = {valid: jqxhr.statusText, data: jqxhr.responseJSON};
return response;
}
Lưu ý rằng đoạn mã trên chỉ có tác dụng trong trường hợp async là sai . Nếu bạn đã đặt async: true , đối tượng được trả về jqxhr sẽ không hợp lệ tại thời điểm cuộc gọi AJAX trả về, chỉ sau đó khi cuộc gọi không đồng bộ kết thúc, nhưng đã quá muộn để đặt biến phản hồi .
beforecreate
.