Saya menggunakan jawaban yang diberikan oleh Carcione dan memodifikasinya untuk menggunakan 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');
}
}
Saya menambahkan dataType dari 'JSON' dan mengubah .responseText untuk responseJSON .
Saya juga mengambil status menggunakan properti statusText dari objek yang dikembalikan. Perhatikan, bahwa ini adalah status respons Ajax, bukan apakah JSON valid.
Bagian belakang harus mengembalikan respons dalam JSON yang benar (terbentuk dengan baik), jika tidak objek yang dikembalikan akan tidak terdefinisi.
Ada dua aspek yang harus dipertimbangkan ketika menjawab pertanyaan awal. Seseorang memberitahu Ajax untuk melakukan secara sinkron (dengan mengatur async: false ) dan yang lainnya mengembalikan respons melalui pernyataan pengembalian fungsi panggilan, alih-alih menjadi fungsi panggilan balik.
Saya juga mencobanya dengan POST dan berhasil.
Saya mengubah GET menjadi POST dan menambahkan data: 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;
}
Perhatikan bahwa kode di atas hanya bekerja dalam kasus di mana async adalah palsu . Jika Anda menetapkan async: true objek yang dikembalikan jqxhr tidak akan valid pada saat panggilan AJAX kembali, hanya nanti ketika panggilan asinkron telah selesai, tetapi itu terlalu terlambat untuk mengatur variabel respons .
beforecreate
.