Похоже, что 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;