【问题标题】:$_POST returns empty array after ajax post request to php page$_POST 在 ajax 向 php 页面发送请求后返回空数组
【发布时间】:2019-06-27 02:54:20
【问题描述】:

我正在尝试通过 ajax 将我的用户名和密码发布到我的 php 文件中,但它 post["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'下检查时,我得到=> Array([username] => admin [password] => admin)但是当它没有将我发送到我的home.php页面并且当我点击网络'home .php' 它为我的用户名和密码提供了“未定义索引:...”。

【问题讨论】:

    标签: php ajax


    【解决方案1】:

    您的 JavaScript 向 home.php 发出 POST 请求,其中包含一些数据。

    home.php 响应一些数据,其中包括一些 HTML 子标题和 $_POST 变量的转储。这不是 JSON。

    你告诉 jQuery dataType: 'json' 所以它期待 JSON。由于它没有得到它,它不会将响应读取为成功并调用error 而不是success。因为你没有定义error,所以什么都不会发生。


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

    如果您没有将其注释掉,那么您将运行window.location = 'home.php',这将触发对home.php HTTP GET 请求并显示结果。

    此请求不会包含 POST 数据,因此 home.php 将不会显示任何内容,除了一些空的 &lt;h2&gt; 元素、一些 未定义的索引 错误和一个空数组的表示。


    当我点击网络“home.php”时,它会为我提供“未定义索引:...”作为我的用户名和密码。

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


    如果您想将 HTTP 请求的结果作为新页面加载,则不要使用 Ajax,只需使用常规表单提交即可。

    当你想用 JS 处理响应并且离开当前页面时使用 Ajax。

    【讨论】:

    • 好的,但我确实定义了我的错误,但我仍然没有收到任何错误我怎么知道问题出在哪里?谢谢你的解释!!
    • @Quentin 我希望(有朝一日)成为一名至少有你一半优秀的程序员。
    【解决方案2】:

    尝试改变这个:

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

    对此:

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

    然后删除这个:

    数据类型:'json',

    【讨论】:

      【解决方案3】:

      尝试将&lt;form action="home.php" method="POST"&gt; 更改为&lt;form action="javascript:void(0)" method="POST"&gt;

      【讨论】:

      • e.preventDefault(); 创造一个更好的效果是一个可怕的黑客...... OP 已经在使用它。这不会改变任何事情。
      【解决方案4】:

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

      【讨论】:

      • 除了节省 4 个字节的 JavaScript 之外没有任何作用。对象属性名称可以是字符串标识符。
      猜你喜欢
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 1970-01-01
      • 2023-03-11
      • 2016-04-14
      • 1970-01-01
      相关资源
      最近更新 更多