在使用jQuery发送表单数据之前对其进行操作

时间:2011-07-21 22:53:28

标签: javascript jquery

我希望在将jQuery发送到服务器之前使用jQuery对表单中的某些数据进行加密,它可以是MD5哈希。这是一个小项目,所以我真的不需要使用SSL。

我有以下JavaScript代码,我在密码确认信息中使用$.md5

    $(document).ready(function() {
        var dataToSend = {};
        dataToSend['action'] = 'signup';
        dataToSend['name'] = name.val();
        dataToSend['email'] = email.val();
        dataToSend['confsenha'] = $.md5(pass2.val());

        var options = {
            target: '#error', 
            url: 'insert.php',
            beforeSubmit: validate,
            data: dataToSend,
            success: function(resposta) {
                $('#message').html(resposta);
            }
        };
        $('#customForm').ajaxForm(options); 
    });

问题是数据正在重复。我认为使用var dataToSend覆盖正在发送的数据会使ajaxForm仅发送该映射中的数据。但除了从dataToSend发送数据外,它还从表单发送数据,因此我想用MD5加密的内容既加密又干净。这是请求中的内容示例:

  

usuario =用户安培;电子邮件=用户%40email.com&安培; senha = 12345&安培; confsenha = 12345&安培;送=安培;行动=注册&安培;名称=用户安培;电子邮件=用户%40email.com&安培; confsenha = d41d8cd98f00b204e9800998ecf8427e

我知道我必须定义一个函数beforeSerialize,但我不知道如何操作表单数据。谁能告诉我怎么做?

1 个答案:

答案 0 :(得分:5)

根据plugin site上的文档:

  

数据
  包含应提交的额外数据的对象   沿添加表单。

along这个词是关键。 因此,当您将数据作为选项对象的一部分传递时,数据将被序列化,并与作为表单一部分的任何数据/输入元素值一起发送。

更好的方法是散列密码值并将其分配给beforeSubmit处理程序中的同一字段或另一个隐藏字段(在您的情况下为validate函数)并完全删除dataToSend对象。

类似的东西:

没有任何隐藏元素:

function validate(){
 //Other Code
  pass2.val($.md5(pass2.val())); 
}

表格中有隐藏元素:

function validate(){
 //Other Code
  $("#hdnPass").val($.md5(pass2.val()));
  pass2.val(""); 
}