AJAX请求不传递控制器$ _POST上的数据

时间:2016-05-04 05:42:48

标签: php jquery ajax codeigniter

我有这个ajax代码。我得到了我的文本框的值,这里的问题是ajax调用中的数据无法在我的控制器中发布。

setTimeout(function()
    {
        var random_pct = 25 + Math.round(Math.random() * 30);

       // The form data are subbmitted, we can forward the progress to 70%
        neonLogin.setPercentage(40 + random_pct);
        var email = $("#email").val();
        var password = $("#password").val();
        // Send data to the server
        $.ajax({
            url: baseurl + 'index.php?login/ajax_login',
            type: "POST",
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            data: { email: $("#email").val(),password: $("#password").val() },
            error: function(data, status, textError)
            {
                // alert('Error: ' + xhr.responseText + ' - ' + status + ' - ' + textError);
                console.log(data);
                console.log('Error: ' + data.responseText + ' - ' + status + ' - ' + textError);
            },
            success: function(response)
            {
                console.log($('#email').val());
                console.log($('#password').val());
                console.log(response);

                // alert(response.submitted_data);
                // Login status [success|invalid]
                var login_status = response.login_status;
                // alert(response.login_status);
                // Form is fully completed, we update the percentage
                neonLogin.setPercentage(100);


                // We will give some time for the animation to finish, then execute the following procedures    
                setTimeout(function()
                {
                    // If login is invalid, we store the 
                    if(login_status == 'invalid')
                    {
                        $(".login-page").removeClass('logging-in');
                                    neonLogin.resetProgressBar(true);
                    }
                    else
                        if(login_status == 'success')
                        {
                            // Redirect to login page
                            setTimeout(function()
                            {
                                var redirect_url = baseurl;

                                if(response.redirect_url && response.redirect_url.length)
                                {
                                    redirect_url = response.redirect_url;
                                }

                            window.location.href = redirect_url;
                            }, 400);
                        }

                    }, 1000);
                }
            });
        }, 650);

这是我的控制器的样子。

function ajax_login()
{
    // $this->output->set_header('Content-Type: application/json');
    $response = array();

    //Recieving post input of email, password from ajax request
    $email      = $_POST["email"];
    $password   = $_POST["password"];
    $response['submitted_data'] = $_POST;

    // $response['email'] = $_POST['email'];
    // $response['password'] = $_POST['password'];

    //Validating login
    $login_status = $this->validate_login( $email ,  $password );
    $response['login_status'] = $login_status;
    if ($login_status == 'success') {
        $response['redirect_url'] = base_url().'index.php?admin/dashboard';
    }

    //Replying ajax request with validation response
    echo json_encode($response);
}

json_encode没有问题。但我没有得到在我的ajax请求中传递的$ _POST ['email']和$ _POST ['password']。谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

在您的Controller的功能中添加如下测试行:$response["test"] = "test";。 确保它会显示在您的控制台中。

将您的ajax网址更改为:index.php/login/ajax_login

在CodeIgniter中,最好使用$this->input->post();代替$_POST[]。如果您需要xss保护(推荐),那么您需要声明:

$email = $this->security->xss_clean($this->input->post("email"));
$password = $this->security->xss_clean($this->input->post("password"));

最后,在Controller的末尾设置输出类型而不是echo

$this->output->set_content_type('application/json')->set_output(json_encode($response));

希望这有帮助。

答案 1 :(得分:0)

您的代码如下:

var email = $("#email").val();
var password = $("#password").val();

data: { email: $("#email").val(),password: $("#password").val() },

这就是为什么您的控制器中的emailpassword的输入帖被识别的原因。

data属性更改为:
data: { 'email': $("#email").val(),'password': $("#password").val() },

如果有帮助,请告诉我。最诚挚的问候