2009-08-11 12 views
5

क्या किसी फॉर्म के ऑन्सबमिट() में AJAX अनुरोध भेजना संभव है? मैं इसे आजमा रहा हूं और परिणाम कमजोर हैं, मुख्य रूप से क्योंकि संभवतः यदि ब्राउजर मूल रूप से भेजने से मेरे अनुरोध को भेजने में अधिक समय लेता है, तो लोड अनुरोध पृष्ठ के स्थान के रूप में जल्द ही मेरा अनुरोध त्याग दिया जाता है, इसलिए कभी-कभी कभी भी सर्वर हिट नहीं करता है।फॉर्म जमा करने से पहले एक अजाक्स अनुरोध भेजना

मूल रूप से, मुझे क्या करना चाहते हैं कि के लिए लॉग इन घटनाओं एकत्र करता है एक ऑडिट लॉग कलेक्टर को जोड़ने है, मुझे लगता है कि हुक करने कम से कम आक्रमण के साथ मौजूदा एप्लिकेशन को करना चाहते हैं।

+0

यदि आप AJAX अनुरोध के लिए एक विशिष्ट जावास्क्रिप्ट ढांचे का उपयोग कर रहे हैं, तो मुझे बताएं और मैं आपको एक और विशिष्ट उत्तर दे सकता हूं। –

उत्तर

18

यह आसानी से प्राप्त किया जा सकता है। जब तक AJAX अनुरोध पूरा नहीं हो जाता तब तक फॉर्म सबमिशन को रोकें।

आपके प्रपत्र onsubmit विशेषता AJAX फ़ंक्शन को कॉल करें और झूठे वापसी (जो फ़ॉर्म जमा रद्द) बनाओ। जब आपका AJAX कॉल पूरा हो जाता है, प्रोग्राम को प्रोग्रामेटिक रूप से सबमिट करें।

उदाहरण के लिए:

<form name="myform" onsubmit="javascript: startAjax(); return false;"> 
... 
<script type="text/javascript"> 
function startAjax() {} // Calls ajaxComplete() when finished 

function ajaxComplete() 
{ 
    document.myform.submit(); 
} 
</script> 
+1

क्या होगा अगर मुझे अजाक्स अनुरोध के नतीजे में दिलचस्पी नहीं है और अजाक्स अनुरोध भेजने के तुरंत बाद फॉर्म जमा करना चाहते हैं? क्या मैं अभी भी इस दृष्टिकोण का उपयोग कर सकता हूं और 'startAjax()' फ़ंक्शन में सबमिट किए गए एक स्पष्ट फ़ॉर्म को कर सकता हूं? –

+0

यह एक लूप में नहीं जाएगा? –

0

इस समस्या को हल करने के लिए एक और तरीका है, कि आप तुल्यकालिक के रूप में ajax कॉल कर सकते हैं।

उदाहरण:

xmlhttp.open("GET", imageUrlClickStream, false); 

इस करके हम यह सुनिश्चित करें कि फ़ॉर्म जमा ajax कॉल जब तक इंतजार करेंगे प्रतिक्रिया मिल कर सकते हैं।

+0

हालांकि यह काम कर सकता है, यह एक बहुत ही खराब अभ्यास है। सिंक्रोनस अनुरोध करना पृष्ठ निष्पादन को फ्रीज करता है, क्योंकि ब्राउज़र को किसी भी अन्य जावास्क्रिप्ट कोड को निष्पादित करने के लिए प्रतिक्रिया का इंतजार करना पड़ता है। – HoLyVieR

0

onclick साथ यह मेरे लिए अच्छी तरह से काम करते हैं क्योंकि ऑनसबमिट पाश में जा रहा ऑनसबमिट बदलें।

<form name="myform" onclick="javascript: startAjax(); return false;"> 
... 
<script type="text/javascript"> 
function startAjax() {} // Calls ajaxComplete() when finished 

function ajaxComplete() 
{ 
    document.myform.submit(); 
} 
</script> 
संबंधित मुद्दे