2013-02-14 15 views
22

के साथ सबमिट करें मैं jQuery के माध्यम से सबमिट को रोकना चाहता हूं और पहले जांचता हूं कि सर्वर पर कोई फ़ाइल मौजूद है या नहीं। यदि यह मौजूद है, तो अनुरोध जारी रखें, अगर कोई संदेश प्रदर्शित न करें और अनुरोध न भेजें। यह मैं क्या है:इंटरसेप्ट फॉर्म jQuery

$("#methodForm").submit(function(e){ 

    checkIndex('upload/segments.gen').done(function() { 
     return true; 
    }).fail(function() { 
     e.preventDefault(); 
     alert("No index present!"); 
     return false; 
    }); 
}); 
इस

checkIndex() है:

function checkIndex(file){ 
    return $.ajax({ 
     url : file, 
     type:'HEAD' 
    }); 
} 

क्या होता है यह है: फ़ाइल सर्वर पर मौजूद है, लेकिन साथ checkIndex रिटर्न असफल। सबसे पहले मैं अलर्ट पॉपअप देखता हूं और फिर यह जारी रहता है और सर्वर को पोस्ट अनुरोध भेजता है।

मैं अन्य उद्देश्यों के लिए checkIndex() का उपयोग करता हूं, साथ ही यह अपेक्षा की तरह काम करता है, इसलिए मुझे पूरा यकीन है कि त्रुटि सबमिट दिनचर्या में कहीं है। लेकिन मुझे नहीं पता कि इसमें क्या गलत है।

+1

दुर्भाग्यवश, यह केवल सिंक्रोनस AJAX अनुरोध के साथ काम करेगा। आपको बटन को अक्षम करना चाहिए और इसे 'पूर्ण' कॉलबैक – Alexander

उत्तर

43

आप एक एसिंक्रोनस विधि (जैसे AJAX) पर कॉलबैक से वापस नहीं आ सकते हैं। इसके बजाय, सभी को एक साथ जमा करने से रोकें, फिर तैयार होने पर इसे सबमिट करें।

$("#methodForm").submit(function(e){ 
    e.preventDefault(); 
    var form = this; 
    checkIndex('upload/segments.gen').done(function() { 
     form.submit(); // submit bypassing the jQuery bound event 
    }).fail(function() { 
     alert("No index present!"); 
    }); 
}); 
+3

यह मेरे लिए काम नहीं कर रहा है। मुझे "TypeError: form.submit एक फ़ंक्शन नहीं है" और यदि मैं $ (फॉर्म) का उपयोग करता हूं। सबमिट करें() यह सबमिट हैंडलर को बार-बार कॉल करता है। – Rooster242

+1

आपके पास 'id =" submit "के साथ एक तत्व है, इसे किसी और चीज़ में बदलें। –

2

यह वास्तव में इस तरह काम does'nt, checkIndex अतुल्यकालिक, इसलिए समय यह कुछ भी रिटर्न से, फ़ॉर्म सबमिट किया जाता है, और बदले बयान के साथ ही एक अलग दायरे में हैं, कुछ इस तरह अधिक प्रयास करें:

$("#methodForm").submit(function(e){ 
    e.preventDefault(); //prevent submit 
    var self = this; 
    checkIndex('upload/segments.gen').done(function() { 
     self.submit(); //submit if ajax OK 
    }).fail(function() { 
     alert("No index present!"); 
    }); 
}); 
+0

@ केविनबी पर सक्षम करना चाहिए - हां, इसे बदल दिया जाएगा! – adeneo

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