2013-02-21 4 views
0

У меня проблема с разрешением моего ответа, который всегда разрешается как истинный. Я отправляю форму для забытого пароля, и у меня есть только одно поле, это электронная почта. Я проверяю базу данных для записи на базе по электронной почте, и если запись возвращается, я устанавливаю json в true, иначе false. Вот код из моего контроллера CodeIgniter:Ответ 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

+0

Каков результат '$ (this).find ("# checkemail"). val(); ' –

+0

и вам не хватает трех точек с запятой, этот оператор внутри if и else' $ ('# successMailMessage'). fadeIn() '. и после окончания '$ .post'. Поэтому проверьте это. и дайте мне знать –

ответ

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) { 

Посмотрите, как вы идете от туда!


EDIT: В связи с OP мы пришли к выводу, что фактический выпуск был путь JS отправлял данные.

var obj = {email: email}; 

Должно быть ...

var obj = {checkemail: email}; 

Были также несколько специфических проблем с PHP, которые были связаны с проблемой, но теперь исправлена.

+0

Привет Киран. Просто испытал это, и по какой-то странной причине он по-прежнему оценивает истину. Если я распечатаю вывод в php-файле, я получаю правильный результат, в зависимости от результата в базе данных. – Zoran

+0

@ Zoran Не могли бы вы разместить JSON, что выйдет из файла PHP? Спасибо – Kieran

+0

Я всегда получаю «true» в console.log, если вы здесь, мы можем продолжить разговор. Я работаю над кодом, пытаясь его исправить, но без везения. – Zoran

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

Hi Brian. Проблема заключается в файле javascript, так как я печатал вывод в php-файле и получаю там правильные результаты. Поэтому, если электронная почта существует, я верю, если я не ошибаюсь. Но в javascript я всегда верю. – Zoran

+0

Хорошо ... также :) вам нужно разобрать JSON! – Brian

+0

Разве это не сделано в файле javascript выше? – Zoran

Смежные вопросы