2013-02-21 95 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