ฉันใช้คำตอบที่ได้รับจาก Carcione และแก้ไขเพื่อใช้ 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');
}
}
ฉันเพิ่มdataTypeของ'JSON'และเปลี่ยน.responseTextเพื่อresponseJSON
ฉันยังดึงสถานะโดยใช้คุณสมบัติstatusTextของวัตถุที่ส่งคืน โปรดทราบว่านี่เป็นสถานะของการตอบกลับ Ajax ไม่ใช่ว่า JSON นั้นถูกต้องหรือไม่
ส่วนหลังต้องส่งคืนการตอบสนองใน JSON ที่ถูกต้อง (มีรูปแบบถูกต้อง) ไม่เช่นนั้นวัตถุที่ส่งคืนจะไม่ถูกกำหนด
มีสองด้านที่ควรพิจารณาเมื่อตอบคำถามต้นฉบับ มีคนหนึ่งแจ้งให้อาแจ็กซ์ดำเนินการแบบซิงโครนัส (โดยการตั้งค่าasync: false ) และอีกอันกำลังส่งคืนการตอบสนองผ่านคำสั่งส่งคืนของฟังก์ชั่นการโทรแทนที่จะเข้าสู่ฟังก์ชันการโทรกลับ
ฉันยังลองกับ POST และใช้งานได้
ฉันเปลี่ยน GET เป็น POST และเพิ่มข้อมูล: 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;
}
โปรดทราบว่าโค้ดข้างต้นจะทำงานเฉพาะในกรณีที่asyncเป็นเท็จ หากคุณต้องตั้งค่าasync: trueอ็อบเจ็กต์ที่ส่งคืนjqxhrจะไม่ถูกต้องในขณะที่การโทร AJAX ส่งคืนเฉพาะในภายหลังเมื่อการโทรแบบอะซิงโครนัสเสร็จสิ้นแล้ว แต่การตั้งค่าตัวแปรตอบกลับช้าเกินไป
beforecreate
ในฐานะ