PHP永远不会收到嵌套的jQuery $ .post数据

时间:2013-11-07 07:20:53

标签: php jquery forms

我正在尝试将简单的表单数据从索引页面发送到PHP函数checklogin.php。我发现的是没有数据,序列化甚至直接输入正在进入PHP函数。我知道jQuery函数被调用的事实,我也知道PHP文件被调用,因为我已经放了各种post函数。

当我使用action="checklogin.php"直接从表单提交数据时,正确接收了$ _POST数据,我可以处理它。但是,当使用jQuery拦截表单提交时,不会收到任何数据。

需要注意的一点是,实际的登录表单HTML是从另一个页面插入的,以允许我处理多个页面而不是一个大索引文件。

表单 - login.php

<form id="loginform" name="loginform" method="post">
    <td>
        <table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
            <tr>
                <td colspan="3"><strong>Member Login</strong></td>
            </tr>
            <tr>
                <td width="78">Username</td>
                <td width="6">:</td>
                <td width="294"><input name="username" type="text" id="username"></td>
            </tr>
            <tr>
                <td>Password</td>
                <td>:</td>
                <td><input name="password" type="text" id="password"></td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td><input type="submit" name="Submit" value="Login"></td>
            </tr>
        </table>
   </td>
</form>

提交事件挂钩 - Index.php

$( document ).ready(function() {                
    $.post("login.php", function(data) { // retrieve login form from other page.
        $("#page5").html(data); 
        $('#loginform').submit(function () {
            event.preventDefault();
            var formData = $(this).serialize();

            console.log("Form Data: " + formData); // this is not blank

            $.post("checklogin.php", formData, function(data) {
                // post-login actions
            })

            });
        });
    })
});

checklogin.php (暂时解决问题)

<?php
    print_r($_POST);
?>

正如我所说,即使是“username = test $ password = blah”而不是'formData'这样的直接输入也会产生一个空的$ _POST数组。我也尝试过使用ajax等效的post post而没有运气。

JavaScript控制台输出

// console.log line above $.post
Form Data: username=test&password=blah

// Result from PHP print_r
Array
(
)

1 个答案:

答案 0 :(得分:1)

使用.on()

由于元素是动态添加的,因此无法将事件直接绑定到它们。因此,您必须使用Event Delegation

$(document).on('submit','#loginform',function () { //code here }

或更好地使用

$('#page5').on('submit','#loginform',function () { //code here }

语法

$( elements ).on( events, selector, data, handler );