如何从codeigniter视图中获取json ajax调用的响应?

时间:2013-02-19 15:40:36

标签: jquery ajax json codeigniter

我想在我的视图中从codeigniter控制器获得响应,但没有成功。这是我的javascript文件中的代码:

 // user enter his e-mail so check him against the database.
   $("#formSendPassword").submit(function(e){     

       e.preventDefault();

        var email = $(this).find("#checkemail").val();

        var obj = {email: email};
        var url = $(this).attr("action");
        var data =  {email: email};

        $.post(url, obj,data, function(jsonResp){
           console.log(success);
            if(jsonResp.success) {
                     alert(jsonResp['success']);
                    $('#successMailMessage').fadeIn();

          }  else {
                    alert("Fail");
                    $('#errorMailMessage').fadeIn();
                    }

        }, 'json');
    })

我的控制器中的代码如下:

 public function checkEmail()
    {     
        // set the validation rules
        $this->form_validation->set_rules('checkemail', 'E-Mail', 'valid_email|required|trim|encode_php_tags');

        $this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />');
        // if validation is passed
        if ($this->form_validation->run() != FALSE) 
        {
            $ids=array();
            $ids[0]=$this->db->where('email', $this->input->post('checkemail'));

            $query = $this->backOfficeUsersModel->get();
            if($query)
            {

                $data = array(
                    'userid'       => $query[0]['userid'],
                    'username'       => $query[0]['username'],
                    'password'       => $query[0]['password'],
                    'firstname'       => $query[0]['firstname'],
                    'lastname'       => $query[0]['lastname'],
                    'email'       => $query[0]['email']
                ); 

                $jsonResp['success'] = "Ok";
                $jsonResp = array();
        } else {   
               // echo json_encode(array("success" => false, "error" => "Wrong email"));
                $jsonResp['success'] = "Fail";
        }
        //  form validation has failed 
        } else {     
            $errorMessage = "Please enter valid e-mail";
        }
    }   // end of function checkEmail 

正如你所看到的,我正在尝试在我的js文件中使用console.log成功,但没有成功。 谁能告诉我我做错了什么?

的问候,卓然

2 个答案:

答案 0 :(得分:0)

在将json响应传递给视图之前,应该使用$ data数组元素来存储它。这个视图是你的javascript回调正在寻找的json响应。我的猜测是你的控制台日志调用永远不会激活。

尝试以下方法:

在您的Controller代码中,例如:

 $data['json'] = json_encode(array("success" => false, "error" => "Wrong email"));
 $this->load->view('json_response', $data);

按如下方式定义视图:

<?php
    $this->output->set_header('Content-Type: application/json; charset=utf-8');
    echo $json;
?>

您还应该在jQuery调用中定义数据类型(dataType:“json”)。

编辑:所以你的jQuery帖子调用应该如下:

$.post(url, data, function(data) {
    console.log(data.sucess);
}, "json");

您也不需要传递obj。此外,您需要记录data.success,而不仅仅是成功。让我知道

答案 1 :(得分:0)

您的控制器正在设置最终数据,但您不打印出来。我没有发现你的数组使用json_encode转换为json,然后将其打印出来。

尝试一下。另外你填充了arrray然后为什么再次做一个= array()?

$jsonResp['success'] = "Ok";
$jsonResp = array();

查看此链接是否可以帮助您:http://amitavroy.com/justread/content/articles/getting-ajax-data-using-views-codeigniter