无法通过this.serialize发送数据

时间:2016-06-16 18:54:07

标签: javascript jquery ajax

我正在使用以下函数来验证并将数据发送到php服务器:

$(document).ready(function () {

$(function() {
    // Setup form validation on the #register-form element
$("#register_form").validate({

    // Specify the validation rules
    rules: {
        register_username: "required",
        register_password: "required",
        register_email: {
            required: true,
            email: true
        },
        register_confirm_password: {
            required: true,
            equalTo: '#register_password'
        },
    },

    // Specify the validation error messages
    messages: {
        register_username: "Please enter your username",
        register_password: "Please enter your password",
        register_confirm_password: {
            required: "Please provide a password",
            equalTo:"Please enter password same as above."
        },
        register_email: "Please enter a valid email address",
    },

    submitHandler: function(form) {
         var pdata = $(this).serialize();
         alert(pdata);


        $.ajax({  
            type: 'POST',
            url: 'http://localhost/quiz/index.php/signin',
            data: $(this).serialize(),
            dataType : 'json',
            success: function(data) {
                if (data.success){
                    console.log("Form is submitted.data is" + data.success);

                    $.each(data, function() {
                        $.each(this, function(k, v) {
                            console.log("key; " + k);
                            console.log("value; " + v);
                        });
                    });

                }
                else
                {
                    console.log("The data returned is:" + data.success);
                }
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(textStatus, errorThrown);
            }
        });
        return false;
    },
});
});

});

所有验证都有效,但问题在于:

var pdata = $(this).serialize();

我得到空的pdata:

alert(pdata);

我不知道为什么这里没有序列化数据。请帮我解决这个问题。

3 个答案:

答案 0 :(得分:1)

不要序列化$(这个) 请尝试序列化表单。

$( "#register_form" ).serialize();

答案 1 :(得分:0)

$(this)不再是你认为的了。它不是#register_form,而是submitHandler函数。

如果你console.log(pdata),你应该在控制台中看到功能定义。

答案 2 :(得分:0)

submitHandler函数的范围不是form元素,因此this不指向您需要的元素。但它确实为您提供了一个名为form的参数,您可以使用该参数,如下所示:

submitHandler: function(form) {
    $.ajax({  
        type: 'POST',
        url: 'http://localhost/quiz/index.php/signin',
        data: $(form).serialize(),
        // your code...