2013-02-19 82 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