0

可能重复:
使用 jQuery 比较两个数组

我必须每隔 30 秒通过 ajax 将表单数据发送到服务器。现在我希望在客户端检查它,并且只有在表单有任何变化的情况下才会点击 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总是变得虚假。

4

2 回答 2

1

那是因为你的变量lastData被认为是一个字符串,而数据是一个对象。因此,您的检查将永远失败,并且您将永远失败isSame = false

编辑:

.serializeArray ()方法创建一个 JavaScript对象数组,准备好被编码为 JSON 字符串。

于 2012-04-20T04:25:52.693 回答
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
 }

每次提交数据时,请务必更新“原始”属性。

于 2012-04-20T05:35:30.090 回答