0

重複の可能性:
jQuery を使用して 2 つの配列を比較する

たとえば、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
 }

データを送信するたびに、必ず「original」属性を更新してください。

于 2012-04-20T05:35:30.090 に答える