क्या async: false
कॉल करते समय सेट करना संभव है $.getJSON()
ताकि कॉल अतुल्यकालिक होने के बजाय ब्लॉक हो जाए?
क्या async: false
कॉल करते समय सेट करना संभव है $.getJSON()
ताकि कॉल अतुल्यकालिक होने के बजाय ब्लॉक हो जाए?
जवाबों:
आपको कॉल का उपयोग करके $.ajax()
इसे समकालिक रूप से बनाना होगा , जैसे:
$.ajax({
url: myUrl,
dataType: 'json',
async: false,
data: myData,
success: function(data) {
//stuff
//...
}
});
यह वर्तमान में $.getJSON()
इस तरह का उपयोग करके मेल खाएगा :
$.getJSON(myUrl, myData, function(data) {
//stuff
//...
});
type: 'POST'
इसे पोस्ट में बदलने के लिए एक विकल्प भी जोड़ेंगे - हालाँकि आप async: false
तब तक उपयोग नहीं करना चाहते जब तक आपको वास्तव में ज़रूरत न पड़े - यह UI को लॉक कर देगा।
दोनों उत्तर गलत हैं। आप ऐसा कर सकते हैं। आपको कॉल करने की आवश्यकता है
$.ajaxSetup({
async: false
});
अपने json अजाक्स कॉल से पहले। और आप कॉल रिटन के बाद इसे सही पर सेट कर सकते हैं (यदि पेज पर अजाक्स के अन्य उपयोग हैं तो आप उन्हें लाइक करें)
$.ajax
(और बाद में आशुलिपि रैपर यानी $.getJSON
, $.get
आदि) तुल्यकालिक किया जाना है। इसके अलावा, दस्तावेज़ीकरण भी इसका उपयोग नहीं करने का सुझाव देता है: "विवरण: भविष्य के अजाक्स अनुरोधों के लिए डिफ़ॉल्ट मान सेट करें। इसका उपयोग अनुशंसित नहीं है।"
मेरे मामले में, जे डी सही है। मुझे कॉल करने से पहले इसे जोड़ना होगा।
$.ajaxSetup({
async: false
});
मेरे पिछले कोड में, मेरे पास यह है:
var jsonData= (function() {
var result;
$.ajax({
type:'GET',
url:'data.txt',
dataType:'json',
async:false,
success:function(data){
result = data;
}
});
return result;
})();
alert(JSON.stringify(jsonData));
यह खोजने का काम करता है। फिर मैं बदल जाता हूं
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
अलर्ट अपरिभाषित है।
यदि मैं उन तीन पंक्तियों को जोड़ता हूं, तो अलर्ट डेटा को फिर से दिखाता है।
$.ajaxSetup({
async: false
});
var jsonData= (function() {
var result;
$.getJSON('data.txt', {}, function(data){
result = data;
});
return result;
})();
alert(JSON.stringify(jsonData));
मुझे नहीं लगता कि आप उस विकल्प को वहां सेट कर सकते हैं। आपको उपयुक्त मापदंडों के साथ jQuery.ajax () का उपयोग करना होगा (मूल रूप से getJSON सिर्फ एक आसान एपीआई में कॉल को लपेटता है, साथ ही साथ)।
अपना खुद का रोल करें
function syncJSON(i_url, callback) {
$.ajax({
type: "POST",
async: false,
url: i_url,
contentType: "application/json",
dataType: "json",
success: function (msg) { callback(msg) },
error: function (msg) { alert('error : ' + msg.d); }
});
}
syncJSON("/pathToYourResouce", function (msg) {
console.log(msg);
})