2013-07-31 13 views
7

Possible solutionजावास्क्रिप्ट: कार्य बिना चेतावनी के काम नहीं कर रहा है()

हैलो, साथी प्रोग्रामर!

मैं हाल ही में किसी समस्या के साथ कुछ मदद के लिए अनुरोध करने के लिए आपको लिख रहा हूं। निम्न समस्या निम्नानुसार है:

1) मेरे पास jQuery के साथ लागू एक AJAX अनुरोध है।

2) सफल प्रतिक्रिया लौटने के बाद, स्क्रिप्ट को संबंधित परिवर्तनों के साथ पृष्ठ को फिर से लोड करना चाहिए और यदि कोई सत्यापन त्रुटियां हैं, तो उन्हें एक छिपे हुए फ़ील्ड के बाद डालें, गैर-महत्वपूर्ण विविध डेटा स्टोर करने के लिए उपयोग किया जाता है। यदि कोई सत्यापन त्रुटियां हैं, तो परिवर्तन सहेजे नहीं जाते हैं और पृष्ठ को सत्यापन त्रुटि संदेशों के साथ पुनः लोड किया जाता है। प्रमाणीकरण स्वयं को सर्वलेट द्वारा ख्याल रखा जाता है।

3) मैंने देखा कि सबकुछ ठीक काम करता है, जब किसी भी प्रकार की चेतावनी() त्रुटि संदेशों के वास्तविक संलग्न होने से पहले प्रस्तुत की जाती है, लेकिन मैं ऐसी चेतावनी नहीं लेना चाहता हूं।

$('#randomFormElement').submit(function() { 
     $(this).ajaxSubmit({ 
      success: function (data, status) { 
       randomFunctionToReloadThePage(arg1, arg2, arg3); 
       var errors = $(data).find('.classNameOfTheErrors').xml(); 
       //alert(something); 
       $(errors).insertAfter('#idOfTheHiddenField'); 
      }, 
      error: function (jqXHR, textStatus, thrownError) { 
      //Error handling if the ajax response fails. 
      } 
     }); 
}); 

तो, मुख्य सवाल यह है:: क्या चेतावनी() यह काम बनाने के साथ सौदा है

यहाँ जावा स्क्रिप्ट कोड है?

==========================

क्रोम पर, यह किसी भी तरह से काम नहीं करता।

एफएफ पर, यह केवल तब काम करता है जब कुछ अलर्ट() मौजूद होता है।

अग्रिम धन्यवाद!

+4

'randomFunctionToReloadThePage' क्या करता है? यदि इसका कोई भी हिस्सा असीमित है, तो अलर्ट द्वारा पेश की गई देरी से कोई फर्क पड़ सकता है। – Thilo

+3

बस एक साइड नोट के रूप में। अगर आप AJAX अनुरोध के बाद अपना पृष्ठ पुनः लोड करते हैं? फिर आप पहले स्थान पर AJAX अनुरोध क्यों करते हैं। पूरे पृष्ठ को सबमिट क्यों न करें और फिर आपको इसे पुनः लोड करने की आवश्यकता नहीं है। – roel

+0

AJAX कॉल पूर्ण होने से पहले आपका पृष्ठ रीफ्रेश हो रहा है? क्या आप अजैक्स द्वारा फॉर्म जमा करने की कोशिश कर रहे हैं? प्रश्नों के लिए –

उत्तर

2

हर किसी के उत्तरों के लिए धन्यवाद, और विशेष रूप से गवी का जवाब, मैं इसे काम करने में कामयाब रहा। जाहिर है, यादृच्छिक FunctionToReloadThePage() में वास्तव में कुछ एसिंक्रोनस चल रहा था, और मैंने .ajaxStop() method.

संपादित करके इसे ठीक करने में कामयाब रहा: संपादित करें: AJAXStop() का उपयोग करते समय एक दूसरी बग मिली।समाधान मैंने पाया ठीक से काम कर इस प्रकार है:

1) randomFunctionToReloadThePage

2) के लिए एक अतिरिक्त पैरामीटर जोड़ें संबंधित पेज में अतिरिक्त पैरामीटर के साथ समारोह आह्वान।

+2

आपको उन सभी को +1 करना चाहिए जिन्होंने याद किया है कि randomFunctionToReloadThePage() शायद असीमित है और आप इस पर टिप्पणी करते हुए कह रहे हैं कि यह नहीं था :) – roel

5

alert() फ़ंक्शन कोड निष्पादन को अवरुद्ध करता है और इसके नीचे जावास्क्रिप्ट कोड की प्रसंस्करण में देरी करता है। यह AJAX अनुरोध को पूरा करने का समय दे सकता है।

+0

यह 'सफलता में है 'अजाक्स कॉल का कार्य, इसका मतलब है कि इस बिंदु पर कॉल पहले ही पूरा हो चुका है। – UweB

+1

@UweB: वह पहला कॉल किया गया है, लेकिन शायद 'randomFunctionToReloadThePage' पृष्ठभूमि में कुछ भी करता है। – Thilo

+1

मैं @ थिलो से सहमत हूं, और मैं मॉर्ननर के पहले भाग से भी सहमत हूं, लेकिन मैं इस बात से असहमत हूं कि 'अलर्ट() '* AJAX अनुरोध * पूरा करने का समय देगा। यह * यादृच्छिक Func * ... पूरा करने के लिए समय में जो भी एसिंक्रोनस ऑपरेशन हो रहा है। :-) – UweB

1

जोड़ने का प्रयास: कैश: झूठी

$('#randomFormElement').submit(function() { 
    $(this).ajaxSubmit({ 
     cache: false, 
     success: function (data, status) { 
      randomFunctionToReloadThePage(arg1, arg2, arg3); 
      var errors = $(data).find('.classNameOfTheErrors').xml(); 
      //alert(something); 
      $(errors).insertAfter('#idOfTheHiddenField'); 
     }, 
     error: function (jqXHR, textStatus, thrownError) { 
     //Error handling if the ajax response fails. 
     } 
    }); 

});

+0

कुछ भी नहीं बदला। –

3

यह कोई जवाब नहीं है लेकिन एक डिबगिंग टिप है (एक टिप्पणी में उचित कोड स्वरूपण नहीं कर सकता)।

alert() के बाद इन दो कॉल करें:

console.log("errors:", errors); 
console.log("hidden:", $('#idOfTheHiddenField')[0]); 

चेतावनी पर टिप्पणी छोड़ दो और इसे चलाने के। यह डेवलपर कंसोल में क्या दिखाता है?

फिर तुलना के लिए, अलर्ट को असम्बद्ध करें, इसलिए यह उन दो कॉलों से पहले चलता है, और इसे फ़ायरफ़ॉक्स में चलाता है। अब कंसोल में क्या है?

+0

मुझे कंसोल में बिल्कुल वही लॉग मिलते हैं। –

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