AJAX表单提交无法正常运行

时间:2013-12-19 11:17:10

标签: javascript php jquery ajax forms

我正在尝试创建一组JavaScript函数,这些函数允许我动态加载和提交表单。我已经设法创建一个将表单加载到页面中的工作函数,但是我无法使提交函数正常工作。当我点击提交时,已经加载的表单(使用JavaScript加载功能)消失,原始内容重新出现。此外,提交功能中的警报也不会出现。

我查看过这个网站,发现了类似的问题,但没有一个在使用AJAX加载表单然后使用AJAX提交,所有其他已经加载了表单。

非常感谢任何帮助,我对使用AJAX非常陌生。

表格

echo $Error;
echo '<form id="login" method="post">';
echo '<input type="test" name="Email" placeholder="exsample@exsample.exsample"';
if(isset($Email)) echo "value = ".$Email;
echo '      />'."<br />";
echo '<input type="password" name="Pass" placeholder="Password" />'."<br />";
echo '<input type="submit" value = "Login"/>'."<br />";
echo '</form>';

加载页面功能

function Page(url,output)
{
    var Request = '';
    if (window.XMLHttpRequest)
    {
        Request=new XMLHttpRequest();
    }
    else
    {
        Request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    Request.onreadystatechange=function()
    {
        if (Request.readyState==4 && Request.status==200)
        {
            document.getElementById(output).innerHTML = Request.responseText;
        }
    }
    Request.open("GET",url,true);
    Request.send();
}

提交功能

$(function () {
$('form#login').on('submit', function(e) {
    alert('Found');
    $.ajax({
        type: 'post',
        url: 'php/login.php',
        data: $(this).serialize(),
        success: function (complete) {
            document.getElementById('output').innerHTML = complete;
        }
    });
    e.preventDefault();
  });
});  

1 个答案:

答案 0 :(得分:2)

如果您使用AJAX加载表单,则需要委派的事件处理程序:

$(document).on('submit', 'form#login', function(event) {
    // your AJAX form submission code here
});

当您使用.on()执行时,它正在寻找该元素在该点存在,但它没有,这意味着您最终不会被绑定任何事件处理程序。

表单的服务器端代码中还有一个拼写错误:<input type="test"这应该是type="text"

完整代码:

$(function () {
    $(document). on('submit', 'form#login', function(e) {
        alert('Found');
        $.ajax({
            type: 'post',
            url: 'php/login.php',
            data: $(this).serialize(),
            success: function (complete) {
                document.getElementById('output').innerHTML = complete;
            }
        });
        e.preventDefault();
    });
});