2011-03-01 15 views
19

मैं एक जावास्क्रिप्ट फ़ंक्शन बनाना चाहता हूं जो एक jQuery AJAX कॉल का मान देता है। मुझे ऐसा कुछ चाहिए।जावास्क्रिप्ट फ़ंक्शन जो AJAX कॉल डेटा देता है

function checkUserIdExists(userid){ 
    return $.ajax({ 
     url: 'theurl', 
     type: 'GET', 
     cache: false, 
     data: { 
      userid: userid 
     }, 
     success: function(data){ 
      return data; 
     } 
    }); 
} 

मुझे पता है कि मैं असींक को गलत पर सेट करके ऐसा कर सकता हूं लेकिन मैं नहीं चाहूंगा।

+0

सवाल क्या है? – Nathan

उत्तर

6

jQuery 1.5 के साथ, आप ब्रांड-नई $.Deferred सुविधा का उपयोग कर सकते हैं, जो वास्तव में इस के लिए है।

// Assign handlers immediately after making the request, 
// and remember the jqxhr object for this request 
var jqxhr = $.ajax({ url: "example.php" }) 
    .success(function() { alert("success"); }) 
    .error(function() { alert("error"); }) 
    .complete(function() { alert("complete"); }); 

// perform other work here ... 

// Set another completion function for the request above 
jqxhr.complete(function(){ alert("second complete"); }); 

Source

+0

इस चर से json डेटा कैसे पढ़ा जाए jqxhr – numerah

3

यह नहीं है कि कैसे जावास्क्रिप्ट एसिंक्रोनस प्रोग्रामिंग वास्तव में किया जाना था। इसके बजाए, सर्वर से लौटाए गए डेटा का उपयोग करने के लिए किसी अन्य फ़ंक्शन को कॉल करने के लिए अपने सफलता फ़ंक्शन में कॉलबैक का उपयोग करें।

+0

+1 सोचने के लिए कि मैं क्या सोच रहा था –

12

आप एक कॉलबैक फ़ंक्शन में पारित कर सकते हैं:

function checkUserIdExists(userid, callback) { 
    $.ajax({ 
     ... 
     success: callback 
    }); 
} 

checkUserIdExists(4, function(data) { 

}); 
+0

+1 - यह वही है जो मैं सोच रहा था, लेकिन एक स्वच्छ, संक्षिप्त कोड उदाहरण में। – jmort253

+0

यहां एक महत्वपूर्ण बात है। आपको '$ .ajax' विधि में' async: false' प्रॉपर्टी जोड़नी होगी। यदि नहीं, तो आपको 'वैश्विक var' में डेटा नहीं मिलता है। यह एक अतिरिक्त जानकारी है। –

30

आप एक AJAX कॉल द्वारा दिए गए डेटा वापस नहीं लौट सकते जब तक आप तुल्यकालिक यह कॉल करना चाहते हैं (और आप नहीं है - मुझ पर भरोसा)। लेकिन आप जो वापस कर सकते हैं वह एजेक्स कॉल द्वारा लौटाए गए डेटा के का वादा करता है और आप इसे वास्तव में एक बहुत ही सुरुचिपूर्ण तरीके से कर सकते हैं।

(अद्यतन:। कृपया ध्यान दें कि वर्तमान में jQuery वादे Promises/A+ specification साथ संगत नहीं हैं - this answer में अधिक जानकारी)

मूल रूप से आप अपने $ .ajax के रिटर्न मान लौट सकते हैं (...) फोन:

function checkUserIdExists(userid){ 
    return $.ajax({ 
     url: 'theurl', 
     type: 'GET', 
     cache: false, 
     data: { 
      userid: userid 
     } 
    }); 
} 

और कोई है जो अपने फ़ंक्शन को कॉल इस तरह इसका इस्तेमाल कर सकते हैं:

checkUserIdExists(userid).success(function (data) { 
    // do something with data 
}); 

यदि आप रुचि रखते हैं तो बेहतर स्पष्टीकरण और डेमो के लिए this post of mine देखें।

+3

+1। मेरे उत्तर का एक आलसी संस्करण :) –

2

टिम, दो स्थितियों परस्पर अनन्य हैं; एक एसिंक्रोनस ऑपरेशन किसी भी उद्देश्य की सेवा नहीं करेगा, न ही यह लौटा डेटा पुनर्प्राप्त करने में सक्षम होगा।

आप अपने ajax के लिए एक घटना-सक्षम बुनियादी ढांचे पर गौर करना चाहिए

7

कॉल jQuery 1.8 के रूप में, "सफलता", "त्रुटि" और "पूर्ण" कॉलबैक पदावनत कर रहे हैं। इसके बजाय आपको "पूर्ण", "असफल" और "हमेशा" का उपयोग करना चाहिए।

तो तुम हो सकता है:

function checkUserIdExists(userid, callback) { 
     return $.ajax({ 
     url: 'theurl', 
     type: 'GET', 
     cache: false, 
     data: { 
      userid: userid 
     } 
    }) 
    .done(callback) 
    .fail(function(jqXHR, textStatus, errorThrown) { 
     // Handle error 
    }); 
} 

checkUserIdExists(2, function(data) { 
    console.log(data); // Do what you want with the data returned 
}); 
संबंधित मुद्दे