为什么 JQuery 没有在 PHP 操作方法中发布值?

Why JQuery is not posting the values in PHP Action Method?

为什么 JQuery 没有在 PHP 操作方法中发布值?

HTML

<form id="login" name= "login">
    <h1>Login Form</h1>
    <div>
        <input type="text" id= "userName" name = "userName" class="form-control"/>
    </div>
    <div>
        <input type="password" id= "password" name = "password" class="form-control" />
    </div>
    <div>
        <input type="button" onclick="Authenticate();" value="Log In" />          
    </div>
    <div class="clearfix"></div>
    <div class="separator">
        <div class="clearfix"></div>
        <br />
    </div>
</form>

JavaScript

function Authenticate() {
    $.ajax({
        url: 'My Url',
        type: "POST",
        async: true,
        data: $('#login').serialize(),
        contentType: "application/json; charset=utf-8",
        success: function (data) {
        },
        error: function (data) {
        }
    });
}

PHP

public function AuthenticateUser() {
    if( isset( $_POST['userName'] ) && isset( $_POST['password'] ) ) {
        header('Content-Type: application/json');
        echo json_encode( 'ok' );           
    }
    else {
        header('Content-Type: application/json');
        echo json_encode( 'Not Ok' );
    }
}

我相信 .serialize() 有效,但我的建议是尝试将 $('#login').serialize() 替换为:

data: {userName: $('#userName').val(), password:$('#password').val() }

原因是要精确控制通过 AJAX 调用提交的数据。 并且您的 AuthenticateUser 应该通过 POST 开始按预期工作。 您不需要传递 contentType: "application/json; charset=utf-8" 因此删除此行。

在确定将哪些参数传递给您的应用时,您可以

echo json_encode($_POST);

并查看传递给脚本的内容。 当然,您也可以使用 error_log(json_encode($_POST)) 并跟踪 POST 数据的服务器错误日志。

看了你的代码,我的感觉是,去掉这一行:

contentType: "application/json; charset=utf-8",

它会起作用的。其他一切看起来都很好。