हर Ajax.Request onSuccess घटना का विस्तार (जावास्क्रिप्ट प्रोटोटाइप फ्रेमवर्क)

वोट
0

मैं एक आवेदन पत्र का उपयोग करता है Ajax.Requestऔर उसके onSuccessबहुत-से स्थान में ईवेंट हैंडलर।

मैं इन सब से पहले एक समारोह (है कि प्रतिक्रिया की जाँच करेगा) कॉल करने की आवश्यकता onSuccessघटनाओं आग। मैं उपयोग करने की कोशिश Ajax.Responders.registerके साथ onCompleteघटना के बाद, लेकिन यह आग Ajax.Requestकी onSuccessघटना। कोई सुझाव?

13/11/2008 को 08:16
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


6 जवाब

वोट
1

आप onSuccess में अन्य कोड से पहले अपने विधि चलाने के लिए और अवास्तविक लौटाते अगर कुछ गलत है सकते हैं।

13/11/2008 को 08:21
का स्रोत उपयोगकर्ता

वोट
3

कई हैं घटनाओं से चुना करने के लिए । यहाँ के लिए घटना श्रृंखला है Ajax.Request:

  1. onCreate
  2. onUninitialized
  3. onLoading
  4. onLoaded
  5. onInteractive
  6. onXYZ, onSuccessयाonFailure
  7. onComplete

onLoading, onLoaded, onInteractiveदिलचस्प ध्वनि, लेकिन के अनुसार कल्पना वे होने की गारंटी नहीं है। यही कारण है कि करने के लिए पर हुक करने की संभावना के साथ आप छोड़ देता है onCreate, जो कहा जाता है बस के बाद अनुरोध वस्तु का निर्माण है, लेकिन अनुरोध से पहले वास्तव में किया जाता है।

13/11/2008 को 08:46
का स्रोत उपयोगकर्ता

वोट
0

"जनरल समाधान" - स्वतंत्र जे एस ढांचे पर (एक तरह से)

var oldFunc = Ajax.Request.onSuccess;
Ajax.Request.onSuccess = function foo() {
  alert('t');
  oldFunc.apply(this, arguments);
}

यह "विस्तार" होगा अपने जे एस समारोह यह कर कर रही है वास्तव में यह क्या करने के लिए इस्तेमाल को छोड़कर हर बार एक चेतावनी बॉक्स दिखाने से पहले यह कार्यान्वित ...

20/11/2008 को 07:28
का स्रोत उपयोगकर्ता

वोट
1

यह एक छोटे से देर से हो सकता है, लेकिन किसी और को एक ही समस्या के बारे में सोच के लाभ के लिए मैं इस समाधान का प्रस्ताव देगा:

ऐसा करने के लिए पहलू-ओरिएंटेड प्रोग्रामिंग के प्रोटोटाइप खुद कार्यान्वयन का उपयोग कर सकते हैं। दी आप अपने सभी onSuccess-पैरामीटर को संशोधित करना होगा, लेकिन यह साथ किया जा सकता एक साधारण खोज एवं प्रतिस्थापन, बजाय अपने सभी कॉलबैक कार्यों को अद्यतन करने का। यहाँ एक उदाहरण Ajax.Request रचना है:

new Ajax.Request('example.html', {
    parameters: {action: 'update'},
    onSuccess: this.updateSuccessful
});

आप समान कोड के टुकड़े अपने कोड भर में फैले हुए है कहते हैं, और आप उन सभी को एक निश्चित समारोह है कि प्रतिक्रिया से पहले वास्तविक समारोह चलाने (या यहाँ तक सब पर चलने से रोका) है सत्यापित करता है के साथ के बाद का होना चाहते हैं। Funtion.wrap प्रोटोटाइप में आपूर्ति का उपयोग करके हम उपरोक्त कोड का विस्तार करके ऐसा कर सकते हैं:

new Ajax.Request('example.html', {
    parameters: {action: 'update'},
    onSuccess: this.updateSuccessful.wrap(validateResponse)
});

जहाँ 'validateResponse' इस के समान एक समारोह है:

// If you use the X-JSON-header of the response for JSON, add the third param
function validateResponse(originalFn, transport /*, json */) {
    // Validate the transport

    if (someConditionMet) {
        originalFn(transport /*, json */);
    }
}

इस प्रकार आप 'रैप (validateResponse)' में onSuccess के लिए बस एक त्वरित खोज और चिपकाने के साथ एक केंद्रीय स्थान में अपने onSuccess-कार्यों विस्तार किया है। यह भी आप विशेष अजाक्स अनुरोध की जरूरतों के आधार पर कई आवरण-कार्यों करने का विकल्प देता है।

11/05/2009 को 03:02
का स्रोत उपयोगकर्ता

वोट
4

एलेक्ज़ैंडर Krzywinski के जवाब देने के लिए समान है, लेकिन मेरा मानना ​​है कि इस का उपयोग करते हैं छिड़क के लिए होने से रोकेगा "रैप" हर जगह, onCreate प्रत्युत्तर करने के लिए इसे मजबूत बनाने के द्वारा।

Ajax.Responders.register({

  onCreate: function(request) {

    request.options['onSuccess'] = request.options['onSuccess'].wrap(validateResponse);

  }

});
05/02/2010 को 05:47
का स्रोत उपयोगकर्ता

वोट
1

अगर यह साफ समाधान है पता नहीं है, लेकिन मेरे लिए यह चाल किया था।


var tmp = Ajax.Request;
Ajax.Request = function(url, args) {
 // stuff to do before the request is sent
 var c = Object.clone(args);
 c.onSuccess = function(transport){
  // stuff to do when request is successful, before the callback
  args.onSuccess(transport);
 }

 var a = new tmp(url, c);
 return a;
}
Ajax.Request.protoype = new tmp();
Ajax.Request.Events = tmp.Events;
delete tmp;
26/06/2010 को 07:48
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more