为什么JQuery没有在PHP Action Method中发布值?

时间:2015-10-28 17:40:38

标签: php codeigniter codeigniter-2 codeigniter-3

为什么JQuery没有在PHP Action Method中发布值?

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' );
    }
}

2 个答案:

答案 0 :(得分:2)

通过查看您的代码,我的感受是,删除这一行:

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

它会起作用。其他一切看起来都不错。

答案 1 :(得分:0)

我确信.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数据。