मैंने 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');
}
}
मैं जोड़ा डेटाप्रकार की 'JSON' और बदल .responseText को responseJSON ।
मैंने लौटी हुई वस्तु के स्टेटसटैक्स प्रॉपर्टी का उपयोग करके स्थिति को पुनः प्राप्त किया । ध्यान दें, यह अजाक्स प्रतिक्रिया की स्थिति है, यह नहीं कि क्या JSON मान्य है।
बैक-एंड को सही (अच्छी तरह से गठित) JSON में प्रतिक्रिया वापस करनी है, अन्यथा लौटी हुई वस्तु अपरिभाषित होगी।
मूल प्रश्न का उत्तर देते समय विचार करने के दो पहलू हैं। एक Ajax को सिंक्रोनाइज़ करने के लिए कह रहा है ( async: false को सेट करके ) और दूसरा कॉलबैक फ़ंक्शन के बजाय कॉलिंग फ़ंक्शन के रिटर्न स्टेटमेंट के माध्यम से प्रतिक्रिया लौटा रहा है।
मैंने इसे POST के साथ भी आजमाया और इसने काम किया।
मैंने GET को POST में बदल दिया और डेटा को जोड़ा : पोस्टडेटा
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 सेट करने के लिए थे : सच है लौटी हुई वस्तु jqxhr उस समय मान्य नहीं होगी, जब AJAX कॉल लौटाएगी , केवल बाद में जब एसिंक्रोनस कॉल समाप्त हो गई हो, लेकिन प्रतिक्रिया चर को सेट करने में बहुत देर हो चुकी हो ।
beforecreate
।