AJAX没有收到POST变量

时间:2017-05-09 16:00:22

标签: php jquery ajax post

我已经阅读了至少20个类似的问题,但无法弄清楚我的代码有什么问题。

我有一个登录表单,如下所示:

<div class="login-form">
    <form class="login-form-container" action="./" method="post" autocomplete="off">
        <input id="login-user" type="text" placeholder="&#xf007; Username"/>
        <input id="login-pass" type="password" placeholder="&#xf023; Password"/>
    <div class="login-button-container">
        <input id="login-button" type="submit" value="Log in"/>
    </div>
    </form>
</div>

我的login.js脚本如下:

$(document).ready(function(){
$("#login-button").click(function(e){
    var username = $("#login-user").val();
    var password = $("#login-pass").val();
    $.ajax({url: "../includes/index.php", //.js file is in a diff directory
        data: {'login':true,'name':username,'pwd':password},
        type: "POST",
        success: function(html) {    
            if (html=='true') {
             //window.location="dashboard.php";
             alert('success');
            }
            else {
                alert('failure');
            }
        }
    });
    return false;
    });
});

这应该被发送回'index.php',它包含一个处理登录信息的单独的php文件。这样做的原因是我可以使用用户成功登录更新页面而无需刷新。

我的其他php文件只是检查帖子数据:

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    var_dump($_POST);
    if (isset($_POST['login']) && $_POST['login']) {
    } else if (isset($_POST['reg']) && $_POST['reg']) { //this is for registration, which will be used once this login is working
    } else {
        echo 'Neither login/reg were set';
    }

var转储显示:

array(0) { }

因此没有收到数据。但是,它明显到达了php页面。我不知道有什么不对,有什么建议吗?

编辑:我想我会补充一点,在login.js顶部用用户名/密码添加警报会打印输入的值。所以正在访问login.js,并且可以在那里访问数据。但它并没有超越它。

Edit2:这是我更新的HTML和login.js代码:

的index.php:

<form class="login-form-container" action="./" method="post" autocomplete="off">
    <input id="login-user" type="text" placeholder="&#xf007; Username"/>
        <input id="login-pass" type="password" placeholder="&#xf023; Password"/>
        <div class="login-button-container">
            <input id="login-button" type="button" value="Log in"/>
        </div>
</form>

login.js

$(document).ready(function(){
    alert(1);
$("#login-button").click(function(e){
    alert(0);
    //e.preventDefault();
    var username = $("#login-user").val();
    var password = $("#login-pass").val();
    $.ajax({url: "../includes/index.php",
        data: {'login':true,'name':username,'pwd':password},
        type: "POST",
        success: function(html) {    
            if (html=='true') {
             //window.location="dashboard.php";
             alert('success');
            }
            else {
                alert('failure');
            }
        }
    });
    return false;
});
});

2 个答案:

答案 0 :(得分:0)

解决方案是改变我的

$("#login-button").click(function(e){

$(document).on("submit",".login-form-container",function(e) {

将处理表单提交,这包括按下按钮以及按下输入(理想情况)。

现在数据正在成功发送,我可以处理实际的登录/注册SQL,所以感谢@Ashokkumar M. Prajapati帮助得出结论:.js脚本实际上并未在提交时触发(不是你们其他人没有帮助!)

答案 1 :(得分:-1)

请将type: "POST"替换为method: "POST"
你在jquery ajax函数中提到它错了。

如果您未指定,则默认为“GET”。所以,如果你检查过$ _POST&amp; $ _GET然后你会在$ _GET中找到你的数据。

尝试var_dump($ _ REQUEST)如果它没有显示任何内容,那么你的客户端没有向服务器发送数据。

另外,检查浏览器开发者控制台的网络面板。所以,你会知道哪些数据传递给服务器。