使用ajax调用自动保存表单数据

时间:2013-08-23 13:39:04

标签: javascript jquery

我正在尝试使用ajax调用在服务器端自动保存表单数据。任何输入更改后我开始自动保存20秒。如果正在进行一次自动保存呼叫,我想等待。以下是我正在采取的步骤。我的方法取决于一个javascript全局变量,我担心我可能遇到某种同步问题。还有其他更好的方法吗?

$('input').change(function() {
            if (autoSaveInProgress == false) {
                //call ajax function in 20secodns.
                setTimeout(autoSaveFunction, 20000);
                autoSaveInProgress = true;
            }
        });

我在收到服务器的响应后,在autoSaveFunction中将autoSaveInProgress设置为false。

2 个答案:

答案 0 :(得分:0)

我建议使用(jQ)xhr-objects属性,而不是假设前一个调用在20秒后完成,

var saveXhr;

function autoSave(){

    if(saveXhr && saveXhr.readyState < 4){ 
         //previous save not completed
         //do something, perhaps saveXhr.abort() or prolong the timer
    }else{
       saveXhr = $.ajax({ /* your save ajax code */ });
    }
}

答案 1 :(得分:0)

为避免使用全局范围变量,您可以在遇到change事件的元素上设置属性。我喜欢使用disabled属性。

var disabled = $that.attr('disabled');
if (disabled) {
    return false;
}
$(this).attr('disabled', 'disabled');

并重新启用该元素,但您必须将该元素传递到异步闭包中(请参阅小提琴):

$that.removeAttr('disabled');

http://jsfiddle.net/EHFZL/

您还可以更改您的更改选择器:http://jsfiddle.net/eHQbh/