0

AjaxSubmit 関数を使用して Jquery でフォームを送信する前に、「password」フィールドの値を上書きしたいと考えています。入力フィールドの値を更新できることはわかっていますが、ユーザーにこの変換を見せたくありません。つまり、パスワード フィールドにカスタム値を送信し、現在の値を画面に表示したいだけです...

どうすればそれができますか?

私の現在のコード:

var loginoptions = { 
    success: mySuccessFuction, 
    dataType: 'json'
}

$('#My_login_form').submit(function(e) {
    e.preventDefault();
    var pass=$("#My_login_form_password").val();
    if (pass.length>0){
        loginoptions.data={
            password: ($.sha1($("#My_login_form_csrf").val()+$.sha1(pass)))
        }
    $("#My_login_form").ajaxSubmit(loginoptions);
    delete loginoptions.data;
});

このコードの問題は、フォーム フィールドの値を含む「パスワード」POST 変数と、「loginoptions.data」に設定した値を含む重複した変数を送信していることです。

4

3 に答える 3

0

どうせやりたいならコールバック関数を使えばいいと思いますbeforeSubmit: function(contentArray, $form, options){}

  beforeSubmit: function(contentArray, $form, options){ 
    for(var i=0; i<contentArray.length; i++){
      if(contentArray[i].name == "password") {
        contentArray[i].value = ($.sha1($("#My_login_form_csrf").val()+$.sha1(pass)))
      } 
    }
  }
于 2012-04-03T13:36:32.500 に答える
0

ajaxSubmit は、フォーム上で jqueryのserialize()関数を使用し、シリアル化された余分なデータも追加しているようです。したがって、値が「1234」の「password」という名前のフィールドがあり、「loginoptions.data.password」を使用してそれを「abcd」に変更しようとすると、すべてがシリアル化され、「options.data」が次のようになりますこれ:

"password=1234&field_2=value_2&password=abcd"

何度も試した結果、ajaxSubmit 関数の使用をあきらめ、ajax 関数を使用してフォームを送信することにしました。

var the_form=$('form#My_login_form');
loginoptions.url=the_form.attr("action");
loginoptions.type=the_form.attr("method");
var serializedForm=decodeURIComponent(the_form.serialize());
loginoptions.data=serializedForm.deserializeToObject();
var pass=$("#My_login_form_password").val();
    if (pass.length>0){
        loginoptions.data.password= ($.sha1($("#My_login_form_csrf").val()+$.sha1(pass)));
    }
$.ajax(loginoptions);

deserializeToObject()関数は次のとおりです。

function deserializeToObject (){
    var result = {};
    this.replace(
        new RegExp("([^?=&]+)(=([^&]*))?", "g"),
        function($0, $1, $2, $3) { result[$1] = $3; }
    )
    return result;
}

String.prototype.deserializeToObject = deserializeToObject;
于 2012-04-04T13:40:54.203 に答える