【问题标题】:can't get json return in codeigniter无法在codeigniter中获得json返回
【发布时间】:2013-03-27 02:42:13
【问题描述】:

我有一个登录页面,当有人尝试登录时,它会向服务器发送一个 ajax 请求。ajax 会转到服务器,因为他们已登录,我已经能够确认。但问题是我的 jQuery 似乎没有收到 JSON。

我的控制器中的功能是:

public function login(){
    $this->load->model('users_model');
    if((!!$this->input->post('email')) || (!!$this->input->post('password'))){
        $ret = $this->users_model->login($this->input->post('email'), $this->input->post('password'));
        echo json_encode(array('status' => "OK", 'msg' => 'Logged in!')); //also tried return
    }else{
        echo json_encode(array('status' => 'FAIL', "msg" => 'Invalid Email or Pass'));
    }
}

而AJAX功能是:

<script type="text/javascript">
    $(document).ready(function() {
        $("#login").ajaxForm(function(json) {
            alert(json);
        if(json.status == true) {
                alert(json.msg);
            //window.location = '<?php echo base_url(); ?>';
            } else {
                alert("Problem");
                $(".error_msg").html(json.msg);
            };
        });
    });
</script>

如果我提醒 json 变量,它是空白的,如果我执行 json.msg,它会显示未定义。那么......我必须做些什么才能得到这个回调,一个json对象或任何类型的对象?请解释一下,以便我理解问题,而不仅仅是如何解决它。非常感谢!

编辑: 这也是表格:

<span class="error_msg"></span></br>

<form id="login" action="<?php echo base_url(); ?>users/login" method="POST" enctype="multipart/form-data">
    Email: <input name="email" type="text"/></br>
    Password: <input type="password" name="password"></br>
    <input type="submit"/>
</form>

【问题讨论】:

  • 另外请显示&lt;form&gt; 标记。
  • 顺便说一句,您的服务器返回 json.status OK 或 FAIL,但您正在测试 json.status == true,这将始终为 true。
  • 更新了,请看。
  • 您的&lt;/br&gt; 不正确。将其替换为&lt;br /&gt;
  • 仔细检查 base_url() 是否以斜线结尾。

标签: ajax json return codeigniter-2


【解决方案1】:

啊,我想我明白了。

这是您使用的插件吗? http://www.malsup.com/jquery/form/#api

在这种情况下,请使用ajaxSubmit,而不是ajaxForm

网上的其他例子是这样的:

$(document).ready(function() {
    $('#login').submit(function() {
    $("#login").ajaxSubmit({
        success: function(json) {
            alert(json);
            if(json.status == true) {
                alert(json.msg);
                //window.location = '<?php echo base_url(); ?>';
            } else {
                alert("Problem");
                $(".error_msg").html(json.msg);
            }
        }
    });
    return false;
    });
});

【讨论】:

  • 好的,让我尝试一下。但同样的回调函数?
  • 已编辑以反映其他在线示例。
  • 几乎可以工作,现在,当页面加载时,它会自动提交表单,导致返回状态:“失败”,然后当我提交表单时,它会转到 php 页面。我需要做些什么来解决这个问题?
  • 再次编辑。提交表单时运行 ajaxSubmit,然后返回 false,这样表单就不会像往常一样提交。
  • 好的,这就是现在发生的事情,我想我们差不多完成了。 alert(json) 给了我,{"status":"OK", "MSG":"Logged in!"} 但 json.status 仍然未定义。在那之后我们应该完成了。
猜你喜欢
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2019-05-02
  • 2013-09-12
  • 2021-04-21
  • 1970-01-01
  • 2021-12-09
  • 1970-01-01
相关资源
最近更新 更多