【问题标题】:Controller does not return the variable控制器不返回变量
【发布时间】:2014-10-02 03:59:27
【问题描述】:

可以通过ajax成功提交表单,并且可以在jquery窗口中显示通知消息(“您的姓名已成功更改!”)但是当我提交一个空表单时,它不会返回消息“失败”。请您检查我的代码并帮助我找出我的错误。

控制器:

$this->load->library('form_validation');
$this->load->model('my_model');   

$this->form_validation->set_rules('name','Name','required|trim|alpha|min_length[3]|xss_clean');

if($this->form_validation->run()) {
    $user_id = $this->session->userdata('user_id');
    $name = $this->input->post('name');
    if ($this->model_users->did_change_name($user_id, $name)) {
        $data = array(
            'message_ok' => "Your name has been successfully changed!"
        );
        echo json_encode($data);
    } else { 
        $data = array(
            'message' => 'fail'                   
        );
        echo json_encode($data);         
    }
}

【问题讨论】:

  • 查看浏览器开发者工具中的请求响应(通常是CTRL+I)——PHP脚本可能在你不知情的情况下出错。
  • @NiceTry 请花一些时间来正确格式化您的代码,我为这个问题做了所有的事情,但请记住,当代码缩进良好时回答问题更有趣!
  • 我检查了控制台网络,没有任何错误
  • Mathieu,感谢您的格式化。实际上,我认为它的格式很好:)

标签: php jquery ajax json codeigniter


【解决方案1】:

这都是关于括号的:)试试这个方法:

if($this->form_validation->run()) {
    $user_id = $this->session->userdata('user_id');
    $name = $this->input->post('name');
    if ($this->model_users->did_change_name($user_id, $name)) {
        $data = array(
            'message_ok' => "Your name has been successfully changed!"
        );
        echo json_encode($data);
    } 
}
else { 
        $data = array(
            'message' => 'fail'                   
        );
        echo json_encode($data);         
    }

【讨论】:

  • 非常感谢:) 我刚刚注意到:)
【解决方案2】:

我很久没有使用 CI,但据我了解,您正在检查表单是否有效以运行一系列事件,例如名称更改。但是,当表单验证返回 false 时,您的验证规则之一就失败了。

if($this->form_validation->run()) {

    // your code

} else {

    $data = array(
        'message' => 'fail'                   
    );
    echo json_encode($data); 

}

【讨论】:

  • 当验证表单返回 false 时,控制器应该返回消息“false”但它不起作用
  • 什么都没有返回,还是返回成功消息?如果是后者,则问题可能出在您的模型中。
  • 我提交名字的时候,改名字成功,返回成功信息。当我提交一个空表单时,它不会更改名称,也不会返回“失败”消息。
【解决方案3】:
if($this->form_validation->run()==TRUE) {

现在您的代码总是会返回第一个参数,因为您实际上并没有检查验证的结果。目前相当于说if(1)

https://ellislab.com/codeigniter/user-guide/libraries/form_validation.html

【讨论】:

  • 我只是按照您描述的方式尝试过,但没有任何改变
猜你喜欢
  • 1970-01-01
  • 2018-01-06
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
相关资源
最近更新 更多