मेरे AJAX कॉल के साथ jQuery Deferreds का उपयोग करने के तरीके पर पकड़ प्राप्त करना - jquery, AJAX

मेरे वेबपेज में 2 सेक्शन हैं जिनकी आवश्यकता हैDOM में सामग्री को इंजेक्ट करने से पहले व्यक्तिगत AJAX कॉल के बाद डेटा की टेम्प्लेटिंग होती है। अभी मैं इसे करने का सबसे अच्छा तरीका देख रहा हूं और मैं jQuery Deferreds के बारे में बहुत सारे लेख पढ़ रहा हूं, इसलिए बहुत से इस बिंदु पर कि मैं पूरी तरह से निश्चित नहीं हूं कि सबसे अच्छा तरीका क्या है। नीचे दिया गया कोड है। मुझे लगता है कि मैं उपयोग करूंगा लेकिन मैं वास्तव में कुछ इनपुट की सराहना करूंगा। मैं कैशिंग के बारे में भी सुपर हाज़ी हूं अगर कोई भी इसके बारे में कुछ सलाह जोड़ना चाहेगा।

जे एस

function ajaxCall1() {
var dfd = $.Deferred();
return $.ajax({
type: "POST",
dataType: "json",
url: "/url1",
data: { },
success: function(data) {
// Run templating code
}
});
return dfd.promise();
}

function ajaxCall2() {
var dfd = $.Deferred();
return $.ajax({
type: "POST",
dataType: "json",
url: "/url2",
data: { },
success: function(response) {
// Run templating code
}
});
return dfd.promise();
}

$.when( ajaxCall1(), ajaxCall2() )
.then(function(){
// Display DOM elements
})
.fail(function(){
// Display error message
});

उत्तर:

उत्तर № 1 के लिए 1

In order to work with Deferreds you should

1 - generate a new $.Deferred()
2 - return its .promise() from the function
3 - .resolve() the deferred in the callback of the Ajax request

की लाइनों में कुछ

function ajaxCall1() {
var dfd = new $.Deferred();
$.ajax({
...
success: function(data) {
dfd.resolve(data);
}
});
return dfd.promise();
}

function ajaxCall2() {
var dfd = new $.Deferred();
$.ajax({
...
success: function(data) {
dfd.resolve(data);
}
});
return dfd.promise();
}

$.when(ajaxCall1(), ajaxCall2()).then(function(data1, data2) {
// data1 holds the result of the first ajax call, data2 that of the second call
});

EDIT: Since $.ajax() already returns a deferred, you could do it simply like

function ajaxCall1() {
return $.ajax({
...
});
}

function ajaxCall2() {
return $.ajax({
...
});
}

$.when(ajaxCall1(), ajaxCall2()).done(function(data1, data2) {
// data1 holds the result of the first ajax call, data2 that of the second call
});

संबंधित सवाल
सबसे लोकप्रिय