我必须通过ajax将表单数据发送到服务器,例如每30秒我现在希望在客户端检查它并且只有在表单有任何变化时才会点击ajax。 我正在使用
var lastData = "";
function saveFormInDB(){
var $form = $("#fb_divBl0ck1").closest('form');
var isSame = false;
data = $form.serializeArray();
if(lastData == ""){
lastData = data;
}else{
if(lastData == data){
isSame = true;
}
lastData = data;
}
if(!isSame){
jqxhr = $.post("/SPSKMEForm/FormSaveServlet", data)
.success(function() {
if(jqxhr.responseText != ""){
alert(jqxhr.responseText);
alert($("#fixedFooter"));
alert($("#fixedFooter").html());
$("#fixedFooter").text(jqxhr.responseText).css("display", "");
$("#fixedFooter").fadeOut("slow");
}
});
}
}
但isSame
总是会对此有所帮助?
答案 0 :(得分:1)
这是因为您的变量 lastData 被视为字符串,而数据是对象。因此,您的支票将始终失败,您将始终拥有isSame = false
。
编辑:
.serializeArray()方法创建一个JavaScript 对象数组, 准备好编码为JSON字符串。
答案 1 :(得分:1)
我会以不同的方式解决这个问题:
在表单输入标记中添加包含已保存(原始)值的属性:
<input type="text" name="name" value="" original="Brian">
现在在你的jQuery中,检查值是否匹配:
if($('[name="name"]').attr('value') == $('[name="name"]').attr('original')) {
//perform .post here
//post success sets attr original to posted value
}
每次提交数据时,请务必更新“原始”属性。