AjaxSubmit перезаписать поле формы перед отправкой - PullRequest
0 голосов
/ 03 апреля 2012

Я хотел бы перезаписать значение поля «пароль» перед отправкой формы в Jquery с использованием функции AjaxSubmit.Я знаю, что могу просто обновить значение в поле ввода, но я не хочу, чтобы пользователь видел это преобразование.Другими словами, я просто хочу отправить пользовательское значение в поле пароля и сохранить текущее значение на экране ...

Как я могу это сделать?

Мой текущий код:

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-переменную "password" со значением поля формы и дублирует переменную со значением, которое я установил в "loginoptions.data".

Ответы [ 3 ]

2 голосов
/ 23 августа 2013

Опираясь на ответ Криштиану, я смог заставить это работать.Если вы используете :beforeSubmit(), измененное значение не публикуется, но если вы используете :beforeSerialize(), оно публикует измененное значение.

         $('#ff').ajaxForm({
            beforeSerialize:function(jqForm, options){
                var serializedForm = decodeURIComponent(jqForm.serialize());
                options.data = serializedForm.deserializeToObject();
                options.data.tPassword = MD5($("#tPassword").val())     
            },
            success:function(data){
               // do stuff
            }
         });
0 голосов
/ 04 апреля 2012

Похоже, что ajaxSubmit использует в форме функцию serialize () jquery, а затем добавляет дополнительные данные, сериализованные тоже. Итак, если у меня есть поле с именем «пароль» со значением «1234», а затем попытаться изменить его на «abcd», используя «loginoptions.data.password», оно будет сериализовать все и поместит «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;
0 голосов
/ 03 апреля 2012

Если вы все равно хотите это сделать, я думаю, вы можете использовать функцию обратного вызова 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)))
      } 
    }
  }
...