【问题标题】:PHP post request always returns 400 when submitted with ajax使用ajax提交时PHP post请求总是返回400
【发布时间】:2015-10-23 07:18:51
【问题描述】:

我正在尝试登录,其中用户名和密码通过 AJAX 提交给 API。问题是它总是说:

警告:file_get_contents(http://example.com/api/login):打开流失败:HTTP 请求失败! HTTP/1.1 400 错误请求 在 /classes/Login.php 第 20 行

但是,如果我删除 jquery 并将其作为纯 PHP 提交,则没有问题,并且我在请求中得到“状态代码 200 OK”。

我的 index.php:

    <form action="ajax/processLogin.php" method="post" name="loginform" id="loginform">
        <label for="user_name">Brugernavn</label>
        <input type="text" id="user_name" name="user_name" required>

        <label for="user_password">Kodeord</label>
        <input type="password" id="user_password" name="user_password" required>

        <input type="submit" id="login" name="login" value="Log ind">
    </form>

processLogin.php:

require_once "../classes/Login.php";
$login = new Login();

$params = array('brugernavn' => $_POST['user_name'], 'password' => $_POST['user_password']);

if($login->doLogin($params)){
    echo "success";
}
else{
    echo "Fail";
}

我的 Login.class.php :

    public function doLogin($params){
        $query = http_build_query($params);
        $contextData = array(
            'method' => 'POST',
            'header' => 'Connection: close\r\n' .
                        'Content-Type: application/x-www-form-urlencoded\r\n'.
                        'Content-Length: ' . strlen($query),
            'content' => $query
        );

        $context = stream_context_create(array('http' => $contextData));
        $data = file_get_contents('http://example.com/api/login', false, $context);

        $result = json_decode($data, true);

        if($result['success']){
            return true;
        }

        return false;
    }

我的 main.js 文件:

    $("#login").click(function(){

    var brugernavn = $("#user_name").val();
    var password = $("#user_password").val();

    if($.trim(brugernavn).length > 0 && $.trim(password).length > 0){
        $.ajax({
            url: 'ajax/processLogin.php',
            type: 'POST',
            data: 'brugernavn=' + brugernavn + '&password=' + password
        })
        .done(function(data) {
            console.log(data);
        })
        .fail(function() {
            console.log("error");
        })
        .always(function() {
            console.log("complete");
        });

    }

    return false;
});

我真的不知道问题出在哪里。这可能是我忽略的愚蠢简单的事情

【问题讨论】:

    标签: php jquery ajax


    【解决方案1】:

    您忘记使用 AJAX 发送数据:

    $.ajax({
        type: "POST",
        url: 'yoururlhere',
        data:{
            user_name: brugernavn,
            user_password: password,
        }
    }).done(function(){
    
    }).fail(function(){
    
    }).always(function(){
    
    });
    

    【讨论】:

    • 该死,你是对的!我实际上已经在 ajax 代码中添加了一个数据,但与您建议的方式不同。太感谢了!我会尽快接受你的回答:)
    猜你喜欢
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多