2013-02-19 122 views
0

我想从我的视图中的codeigniter控制器得到响应,但没有成功。这里是我的JavaScript文件中的代码:如何获得在codeigniter视图中json ajax调用的响应?

// 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 

正如你所看到的,我试图在CONSOLE.LOG我的js文件的成功,但没有成功。 谁能告诉我我做错了什么?

问候,卓然

+0

为什么你试图通过这两个'obj'和'data'到'$ .post'? – Musa 2013-02-19 15:42:37

+0

你在哪里使用'echo/print'来输出到浏览器? – 2013-02-19 15:46:51

+0

我尝试在控制台中记录javascript中的输出,但我没有收到任何回应。 – Zoran 2013-02-19 16:49:58

回答

0

您应该使用$数据数组元素将它传递给一个视图之前来存储您的JSON响应。这个视图是您的javascript回调所寻找的json响应。我的猜测是你的控制台日志调用不会触发。

尝试以下操作:

在控制器代码是这样的:

$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,而不仅仅是成功。让我知道

+0

我目前试图做的是从console.log输出控制器代码。我现在注意到代码。添加$ data ['json'] = json_encode(array(“success”=> false,“error”=>“错误的电子邮件”));我想要console.log在我的JavaScript像这样的json:console.log(jsonResp);但我注意到了。 – Zoran 2013-02-19 18:21:54

+0

我看到你想从你的控制器登录 - 最好的做法仍然是通过加载我写的视图来做到这一点。我还在我的答案中添加了特定的jQuery函数供您参考。 – 2013-02-19 18:32:01

0

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

试一下。另外你正在填充arrray,然后你为什么又要做一个= array()?

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

看看这个链接可以帮助你:http://amitavroy.com/justread/content/articles/getting-ajax-data-using-views-codeigniter

+0

我添加回声json_encode($ jsonResp);上面两条线的波纹管,我什么也没得到。 console.log仍然是空的。什么都没发生。 – Zoran 2013-02-19 17:53:07