$ _POST在ajax发布请求到php页面后返回空数组

时间:2019-02-02 22:04:16

标签: php ajax

我正在尝试通过ajax将用户名和密码发布到我的php文件中,但是它发布了[[username]]和post [“ password”]最终都是未定义索引

我尝试了以下方法。

/index.php

<form action="home.php" method="POST">
<input name= "username" id="usrname" type="text" placeholder="username">
    <input name="pswrd" id="pswrd" type="password" placeholder="password">
    <button type="submit" id="submit">Submit</button>
</form> 

/main.js

 $('#submit').click(function (e) {
    e.preventDefault();
    var username = $('#usrname').val();
    var pswrd = $('#pswrd').val();

    if (username === "" || pswrd === "") {

        //validation
    } else {
        $.ajax({
            url: "home.php",
            type: 'POST',
            dataType: 'json',
            data: {
                "username": username,
                "password": pswrd
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            },
            success: function (data) {
                alert('its works')
                // window.location = 'home.php';
            }
        })
    };
})

/home.php

if (isset($_POST)) {
$username = $_POST['username'];
$password = $_POST['password'];
    echo "<h2>".$username."</h2>"; 
    echo "<h2>".$password."</h2>";   
} else {    
    echo "<h2>Nothing received</h2>";   
}
print_r($_POST)

当我单击提交时,请求确实得到了应有的处理。当我在'network-> preview'下检查时,我得到=>数组([username] => admin [password] => admin),但是当它没有将我发送到home.php页面时,以及当我单击网络'home'时.php”,它为我的用户名和密码提供了“未定义的索引:...”。

4 个答案:

答案 0 :(得分:1)

您的JavaScript使POST请求home.php与在它的一些数据。

home.php响应一些由HTML子标题和$_POST变量组成的数据。这不是JSON。

您告诉jQuery dataType: 'json',因此它需要JSON。由于未得到响应,因此不会将响应读取为成功,而是调用error而不是success。由于您没有定义error,所以什么也没发生。


如果请求成功,它将显示警报。

如果你没有评论出来,你会然后运行window.location = 'home.php'这将引发的 HTTP GET请求,home.php,并显示结果。

此请求将不包括POST数据,以便home.php将显示什么除了一些空<h2>的元素,一些未定义索引错误和空数组的表示。


  

当我点击网络“ home.php”时,它为我提供了“ Undefined index:...”作为我的用户名和密码。

这会手动产生与window.location = 'home.php';相同的效果(发出GET请求),但存在上述相同的问题。


如果要加载的新页面的HTTP请求的结果和不使用Ajax 后,只需使用常规的表单提交。

当您要使用JS处理响应并且离开当前页面时,请使用Ajax。

答案 1 :(得分:0)

尝试更改此内容:

  

数据:{                   “用户名”:用户名,                   “密码”:pswrd               }

对此:

  

数据:'username ='+ username +'&password ='+ pswrd,

并删除此内容:

  

数据类型: 'JSON',

答案 2 :(得分:-1)

尝试将<form action="home.php" method="POST">更改为<form action="javascript:void(0)" method="POST">

答案 3 :(得分:-1)

尝试ajax调用... data {username:username, password:pswrd} ...不带“