秘银阿贾克斯发送空输入

时间:2018-01-26 23:03:58

标签: javascript php jquery codeigniter mithril.js

我尝试使用CodeIgniter通过ajax和Mithril.js发送POST请求。但由于某种原因,输入始终为空。我已经尝试了常规的ajax帖子请求并且工作正常,但秘银没有。

       m.request({
            method: "POST",
            url: "http://localhost/index.php/login",
            data: {
                username: $("#login-username").val(), 
                password: $("#login-password").val()
            }
        })
        .then(function(result) {
            console.log(result)
        })

和php

public function login()
    {
        $username = $this->input->post('username');

        die($username);
    }

它始终打印" null"在控制台。有什么想法吗?

更新:

 <form class="uk-form-stacked uk-margin-remove" id="login-form" method="post" action="index.php/login">
            <fieldset class="uk-fieldset">
                <div class="uk-margin">
                    <div class="uk-inline uk-width-1-1">
                        <span class="uk-form-icon" uk-icon="icon: user"></span>
                        <input class="uk-input" id="login-username" name="username" type="text" placeholder="Username">
                    </div>
                </div>

                <div class="uk-margin">
                    <div class="uk-inline uk-width-1-1">
                        <span class="uk-form-icon" uk-icon="icon: lock"></span>
                        <input class="uk-input" id="login-password" name="password" type="password" placeholder="Password">
                    </div>
                </div>

                <div class="uk-margin" style="margin-top:10px">
                    <label ><input class="uk-checkbox" type="checkbox"> Remember me</label>
                </div>

                <input type="submit" class="uk-button uk-button-primary uk-width-1-1" value="Login">
            </fieldset>
        </form>

路线:

$route['login']['post'] = 'Users/login';

3 个答案:

答案 0 :(得分:1)

该代码将JSON主体发送到服务器,而不是表单提交。我猜你的PHP代码希望数据格式化为<form>会发送它,所以为此你想要使用FormData实例。

var data = new FormData();

data.append("username", document.querySelector("#username").value);
data.append("password", document.querySelector("#password").value);

m.request({
        method: "POST",
        url: "https://httpbin.org/post",
        data: data
    })
    .then(function(result) {
        console.log(result)
    })

我还设置了一个JsBin,你可以看到这个工作&amp;捅它。

https://jsbin.com/gififo/2/

答案 1 :(得分:0)

尝试打印数据,以便能够在控制台上看到它。

public function login()
    {
        $username = $this->input->post('username');
        echo $username;
    }

答案 2 :(得分:0)

我不知道你是否定义了一个路由(在app / config / route.php中),但实际上你是指向默认控制器。

如果您尝试将请求发送到login控制器的users方法,例如,您的请求路径应为http://localhost/index.php/users/login

我还建议您使用base_url函数而不是简单的字符串,这在您在真实服务器上部署应用程序时要容易得多。

所以,我建议改变这一行

url: "http://localhost/index.php/users/login",

通过

url: <?= json_encode(base_url("/users/login")) ?>,

对于此功能的工作,您应该在控制器URI中或直接在当前方法中加载__construct助手:

$this->load->helper('URI');