2011-02-23 7 views
53

yayQuery पॉडकास्ट का एपिसोड 11 $.ajax context option का उल्लेख करता है। सफलता कॉलबैक में मैं इस विकल्प का उपयोग कैसे करूं? जो मैं वर्तमान में कर रहा हूं वह मेरे इनपुट पैरामीटर को सफलता कॉलबैक पर वापस भेज रहा है ताकि मैं उस आईडी को एनिमेट कर सकूं जिसे सफलता/त्रुटि के बाद बुलाया गया था। यदि मैं संदर्भ विकल्प का उपयोग करता हूं, तो शायद मुझे पैरामीटर को कॉल किए गए दिनचर्या से वापस पास करने की आवश्यकता नहीं है।

इस उदाहरण में, मैं STATEID वापस सफलता क्षेत्र के लिए इतना है कि राज्य डोम से निकाल दिया जाता एक बार यह डेटाबेस से हटा दिया गया है पारित:

$('td.delete').click(function() { 
    var confirm = window.confirm('Are you sure?'); 
    if (confirm) { 
    var StateID = $(this).parents('tr').attr('id'); 
    $.ajax({ 
     url: 'Remote/State.cfc', 
     data: { 
     method: 'Delete', 
     'StateID': StateID 
     }, 
     success: function(result) { 
     if (result.MSG == '') { 
      $('#' + result.STATEID).remove(); 
     } else { 
      $('#msg').text(result.MSG).addClass('err');; 
     }; 
     } 
    }); 
    } 
}); 

उत्तर

105

यह सभी context करता है का मान सेट कॉलबैक में this

इसलिए यदि आप एक ईवेंट हैंडलर में हैं, और आप कॉलबैक में this चाहते तत्व यह है कि घटना प्राप्त होने के लिए आपको क्या करना चाहते हैं:

context:this, 
success:function() { 
    // "this" is whatever the value was where this ajax call was made 
} 

आप इसे किसी और बनना चाहता था तो प्रकार, बस द्वारा सेट किए गए, और this कि संदर्भित करेंगे: कोड आप सवाल को जोड़ा गया है, तो आप StateID इस्तेमाल कर सकते हैं में

context:{some:'value'}, 
success:function() { 
    // "this" the object you passed 
    alert(this.some); // "value" 
} 

, लेकिन आप w वास्तव में इसकी आवश्यकता नहीं है क्योंकि आपके पास उस चर के लिए पहले से ही पहुंच है।

var StateID = $(this).parents('tr').attr('id'); 
$.ajax({ 
    url: 'Remote/State.cfc' 
    ,data: { 
     method:'Delete' 
     ,'StateID':StateID 
    } 
    ,context: StateID 
    ,success: function(result){ 

     alert(this);  // the value of StateID 
     alert(StateID); // same as above 

     if (result.MSG == '') { 
      $('#' + result.STATEID).remove(); 
     } else { 
      $('#msg').text(result.MSG).addClass('err');; 
     }; 
    } 
}); 
+3

ओह, ठीक है। धन्यवाद! मैं अभी भी वैरिएबल स्कोप का अनुमान लगा रहा हूं। –

+1

@cf_PhillipSenn: आपका स्वागत है। हाँ, यह मुश्किल हो सकता है। शायद 'संदर्भ:' का सबसे आम उपयोग पहला समाधान है जहां आप कॉलबैक के अंदर 'इस' के समान मान को बनाए रखना चाहते हैं क्योंकि यह बाहर था। – user113716

+1

@ user113716 तो मेरे पास इन दोनों में से एक को मेरे AJAX कॉल में डालने का विकल्प है: 'संदर्भ: {parent_group: parent_group, कंटेनर: कंटेनर}' 'संदर्भ: यह ' और फिर मैं' console.log कर रहा हूं (this.parent_group) ', इन दोनों कामों को नहीं करना चाहिए? केवल पहला काम कर रहा है। –

11

आप संदर्भ विकल्प सेट करते हैं, तो सफलता में this जो कुछ भी आप context के लिए मूल्य के रूप में स्थापित किया जाएगा। इसलिए यदि आप संदर्भ के रूप में अपने इनपुट पैरामीटर नाम और मान वाले एक ऑब्जेक्ट शाब्दिक पास करते हैं, तो सफलता में आप अपने पहले इनपुट पैरामीटर के मान प्राप्त करने के लिए this.param1 का उपयोग कर सकते हैं।

अधिक के लिए .ajax() दस्तावेज़ देखें।

संबंधित मुद्दे