2013-02-21 134 views
0

我解決我的問題總是解決爲真。我正在提交忘記密碼的表單,並且我只有一個字段,即電子郵件。我根據電子郵件檢查數據庫中的記錄,如果記錄被返回,我將json設置爲true,否則設置爲false。這裏是我笨控制器代碼:JSON響應總是返回true

public function checkEmail() 
    {  
     // set the validation rules 
     $this->form_validation->set_rules('checkemail', 'E-Mail', 'valid_email'); 
     $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'] 


       );   
       $currentUser = array(); 
       $currentUser = $this->session->set_userdata($data); 


       echo json_encode(array("success" => "true")); 
     } else { 

       echo json_encode(array("success" => "false")); 
     } 
     // form validation has failed 
     } else {  
      $errorMessage = "Wrong email!"; 
     } 
    } // end of function checkEmail 

現在,當我在我的javascript文件檢查結果,我得到總是如此。這裏是代碼:

 $("#formSendPassword").submit(function(e){  
     e.preventDefault(); 

     var email = $(this).find("#checkemail").val(); 
     var obj = {email: email}; 
     var url = $(this).attr("action"); 
     $.post(url, obj, function(r){ 
      if(r.success == "true") { 
       console.log(r.success); 
       $('#forgotPasswordForm').hide(); 
       $('#successMailMessage').fadeIn() 
      } else { 
       $('#forgotPasswordForm').hide(); 
       $('#errorMailMessage').fadeIn() 
      } 
     }, 'json') 
    }) 

任何人都可以幫我一個這個嗎?

問候,卓然

+0

如果我在php中打印結果,我會得到正確的結果。但是,當我嘗試console.log輸出alwasy評估successMailMessage,即使它應該顯示errorMailMessage。任何人? – Zoran 2013-02-22 14:52:13

+0

'$(this)的輸出是什麼。find(「#checkemail」)。val();' – 2013-02-24 03:27:12

+0

,你缺少三個分號,這個語句在if和else'$('#successMailMessage')。fadeIn()'中。並在'$ .post'結尾後面。所以檢查出來。並讓我知道 – 2013-02-24 03:34:48

回答

1

首先修改PHP ...

json_encode(array("success" => "true")); 

json_encode(array("success" => true)); 

,也

json_encode(array("success" => "false")); 

json_encode(array("success" => false)); 

然後修改JS通過改變如下...

if(r.success == "true") { 

到...

if(r.success === true) { 

看你怎麼從那裏!


編輯:在與OP的聯絡中,我們斷定實際問題是JS發佈數據的方式。

var obj = {email: email}; 

本來應該...

var obj = {checkemail: email}; 

也有與人無關的問題,但現在已經被固定在PHP的幾個具體問題。

+0

嗨基蘭。剛剛測試過,出於某種奇怪的原因,它仍然評估爲真。如果我在php文件中輸出輸出,我會得到正確的結果,具體取決於數據庫中的結果。 – Zoran 2013-02-23 18:48:22

+0

@Zoran你可以發佈PHP文件輸出的JSON嗎?謝謝 – Kieran 2013-02-23 22:10:54

+0

如果你在這裏,我總是會在console.log中得到「true」,我們可以繼續聊天。我研究代碼,試圖修復它,但沒有任何運氣。 – Zoran 2013-02-23 22:35:03

0
if ($this->form_validation->run() != FALSE) 

應該

if ($this->form_validation->run() !== FALSE) 

或者乾脆

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

就是要chekc假...!=可能並不總是做的最佳途徑你期待!

您需要解析JSON在JS:myObj = $.parseJSON(r);

然後用myObj.success

+0

嗨布賴恩。問題在於javascript文件,因爲我在php文件中輸出了輸出,並且在那裏得到了正確的結果。所以,如果電子郵件存在,我會變得真實,如果不是我會得到錯誤的。但在JavaScript中我總是如此。 – Zoran 2013-02-21 16:41:21

+0

好的...也:)你需要解析JSON! – Brian 2013-02-21 16:47:21

+0

這不是在上面的JavaScript文件中完成的嗎? – Zoran 2013-02-21 16:53:27