2011-04-27 12 views
12

पृष्ठभूमि में किसी फ़ॉर्म की आवधिक बचत को कैसे कार्यान्वित करें? जीमेल करता है कि एक ही तरह की बात है।समय-समय पर ऑटोसवे फॉर्म

+3

आवधिक ajax अनुरोध? – fl00r

+0

@flOOr हाँ आवधिक AJAX अनुरोध। –

+1

जो एक उत्तर है :) – fl00r

उत्तर

15
setInterval(function(){ 
    var form = $('#my-form-id'); 
    var method = form.attr('method').toLowerCase();  // "get" or "post" 
    var action = form.attr('action');     // url to submit to 
    $[method](action, form.serialize(), function(data){ 
    // Do something with the server response data  
    // Or at least let the user know it saved 
    }); 
},10000);            // do it every 10 seconds 

आप फार्म की विधि का उपयोग नहीं करना चाहते हैं, लेकिन हमेशा उपयोग करने के लिए 'पोस्ट' चाहते हैं, तो का उपयोग करें:

$.post(action, form.serialize(), ...); 

और, यदि आप अपने आपूर्ति करना चाहते हैं स्वतः सहेजना के लिए अपनी कार्रवाई के लिए कार्रवाई से अलग है वास्तविक बचाने:

$.post("/autosave/comments", form.serialize(), ...); 
+1

- @ फ़ोगोज़, क्या आप अपने पहले कोड ब्लॉक में समझा सकते हैं जहां फॉर्म सत्यापन होगा? –

+1

@timpeterson 3.5 साल बहुत देर से प्रतिक्रिया, लेकिन: मुझे लगता है कि आप क्लाइंट-साइड सत्यापन के बारे में बात कर रहे हैं, और यदि आप अमान्य हैं तो आप फॉर्म जमा नहीं करना चाहते हैं? यदि ऐसा है, तो यह सिर्फ कोड है, है ना? 'अगर (फॉर्मआईस्वालिड (फॉर्म)) $ [विधि] (...);' – Phrogz

4

आपको क्लाइंट पक्ष पर एक समय-समय पर लूप की आवश्यकता होगी जो प्रत्येक x सेकंड/मिनट के रूप को फ़ॉर्म को सहेज लेगा। ऐसा करने का एक कच्चा तरीका setTimeout जावास्क्रिप्ट फ़ंक्शन होगा जो फ़ॉर्म के फ़ील्ड मान एकत्र करता है और मॉडल को अपडेट (रेल इन केस में पुट) AJAX अनुरोध के माध्यम से अपडेट करता है।

उदाहरण

यहाँ यह करने का एक कच्चा रास्ता है (यानी वहाँ एक बेहतर तरीका हो सकता है):

// repeat every 10 seconds 
var repeatTime = 10 * 1000; 

function updateModel(){ 
    // get field values (using jQuery, etc.) 
    // make ajax request using these field values 
    //(make sure put parameters match model attribute names) 
    console.log('updated'); 
    setTimeout(updateModel, repeatTime); // start call over again 
} 

setTimeout(updateModel, repeatTime); 

मैं console.log शामिल थे ताकि तुम अभी Firebug में बाहर इस परीक्षण कर सकते हैं और देखें कि updateModel हर 10 सेकंड निष्पादित करता है। मैं PUT AJAX अनुरोध उत्पन्न करने के लिए jQuery का उपयोग करने की अनुशंसा करता हूं।

+0

क्या आप कोई उदाहरण दे सकते हैं? –

+2

setTimeout() के बजाय setInterval() का उपयोग क्यों नहीं करें? –

1

क्यों ग्राहक पर विशुद्ध रूप से ऐसा नहीं, एक स्थानीय डेटाबेस (या जो भी) का उपयोग कर? इससे जटिलता, सर्वर लोड और बैंडविड्थ उपयोग कम हो जाना चाहिए।

स्थायी या प्रति-सत्र भंडारण - जो कुछ भी उचित है - और आप प्रत्येक कीस्ट्रोक के बाद सहेज सकते हैं: setTimeout() के लिए कोई आवश्यकता नहीं है।

0

Sisyphus.js: जीमेल की तरह क्लाइंट-साइड ड्राफ्ट और थोड़ा और। ब्राउजर क्रैश, टैब क्लोजिंग और अन्य आपदाओं के बाद उन्हें पुनर्स्थापित करने के लिए एचटीएमएल फॉर्म डेटा को स्थानीय स्टोरेज में सहेजने के लिए विकसित किया गया। http://sisyphus-js.herokuapp.com

स्मैशिंग पत्रिका लेख: http://coding.smashingmagazine.com/2011/12/05/sisyphus-js-client-side-drafts-and-more/

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