पृष्ठ पर जावास्क्रिप्ट AJAX onComplete घटना कहा जाता है से पहले क्रियान्वित नहीं किया गया है

वोट
0

मैं एक रूप है कि मेरे डेटाबेस में एक विजेट डालने के लिए एक अजाक्स पोस्ट अनुरोध करता है। रूप में, मैं एक का चयन करें जहां आप विजेट से चयन कर सकते हैं। बाद db डालने किया जाता है, मैं सलेक्ट बॉक्स अद्यतन करना होगा। मैं वास्तव में अभी के लिए पूरा फ़ॉर्म बदलें।

क्योंकि सलेक्ट बॉक्स विजेट नहीं है, मैं जावास्क्रिप्ट में वस्तुओं की एक प्रति होनी चाहिए। मैं इस वर widget_objects कहते हैं। प्रपत्र अद्यतन घटना के दौरान बदल दिया जाता है, मैं गहरे लाल रंग का चर <% = @widget_objects%> प्रिंट और मैं नव निर्मित वस्तु देख सकते हैं। हालांकि, जब मैं onComplete घटना में जावास्क्रिप्ट वर widget_objects तक पहुँचने का प्रयास, नई वस्तु मौजूद नहीं है। मैं पृष्ठ पर कोड की इस पंक्ति के साथ जावास्क्रिप्ट widget_objects बनाएँ: widget_objects = <% = @widget_objects%>;

तो ऐसा लगता है कि कोड की रेखा से ऊपर Ajax अनुरोध के onComplete घटना से पहले मार डाला नहीं है। हालांकि, मैंने सोचा था कि के बाद पेज लोड किया गया है onComplete घटना होती है, और के बाद स्क्रिप्ट eval'd कर रहे हैं मैं ग्रहण करेंगे .... किसी भी विचार?

<%= submit_to_remote( 
                    save_widget, 
                    Save Widget & Generate Embed Code, 
                    {
                        :url => widgets_url(:user_id => @user.id),
                        :update => widget_form,
                        :method => :POST,
                        :html => {  :id => save_widget_button, 
                                    :onclick => this.value='Saving...'; this.disabled = 'true';,
                                    :style => width: 220px;
                                 }, 
                        :complete =>
                            $('save_widget_button').disabled=''; 
                            $('save_widget_button').value='Save Widget & Generate Embed Code';
                            var last_id = $j('select#widget_id').children(':last').attr('value');
                            alert( widget_objects[last_id] );
                            ,
                        :success => reportMessage('success', request.headerJSON.success, 'save_widget_status'); $('band_form').reset();,
                        :failure => reportMessage('failure', request.headerJSON.errors, 'save_widget_status');
                    }) %>
03/02/2009 को 05:56
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
1

सच करने के लिए सेटिंग EvalScripts काम करना चाहिए।

वरना आप का उपयोग कर स्क्रिप्ट लोड कोशिश कर सकते हैं

> <script> function window.onload(){
> alert('I am loaded as the page
> completes loading') } </script>

अगर यह तो मदद नहीं करता है आप फ़ंक्शन को कॉल कर सकते हैं: ajax कॉल में लोड करते हुए प्रतिक्रिया मिली है समारोह बुलाया जाएगा।

07/02/2009 को 10:33
का स्रोत उपयोगकर्ता

वोट
1

मैं अपने PHP स्क्रिप्ट, जहां स्क्रिप्ट के समय सिंक्रनाइज़ेशन से बाहर लग रहा था में हो रहा करने के लिए कुछ इसी तरह की थी। यह कैसे कोड है कि ajax कॉल के बाद दिखाई दिया onSuccess घटना में कोड से पहले अमल के बारे में अधिक था, और समाधान इस तरह, एक गुमनाम समारोह के अंदर पूरे घटना प्रतिक्रिया कोड रैप करने के लिए किया गया था:

onSuccess: function(reply)
{
    resp = reply.reponseText();
    pieces = resp.split('|');
    (...etc...)
}

पूरा पहचानकर्ता: आप अपने के बाद कुछ इसी तरह की कोशिश कर सकते। उम्मीद है की यह मदद करेगा!

16/02/2009 को 12:44
का स्रोत उपयोगकर्ता

वोट
1

जब समस्याओं के इन प्रकार के साथ काम कर, फायरफॉक्स 'जे एस डिबगर उपयोग करते हैं, (एड-ऑन Firebug स्थापित) अपवाद पर स्वत: तोड़ने (स्क्रिप्ट टैब से) सक्षम करें, और पृष्ठ पुनः लोड। फ़ायरफ़ॉक्स (प्रतिक्रिया आर.जे. के भीतर से जैसे प्रारंभिक) एक अपवाद को बीच में रोक तो अपवाद को ठीक। एक 'कोशिश {...} पकड़ (ई) {चेतावनी (ई)}' जे एस आवरण के साथ पूरा कोड: आप सिर्फ अपने आर.जे. और चारों ओर कर सकते हैं।

इसके बाद, prototype.js के respondToReadyState विधि है, जहां आप आर.जे. द्वारा आपके एप्लिकेशन से जवाब दें और विधि evalResponse () के माध्यम से कदम का निरीक्षण करने में सक्षम हो जाएगा अंदर breakpoints सेट करने के लिए जे एस डिबगर का उपयोग करें। आप बहुत जल्दी से उसे संक्षिप्त होगा।

16/02/2009 को 20:59
का स्रोत उपयोगकर्ता

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