2013-04-01 2 views
0

Я работаю с CodeIgniter и пытаюсь захватить значения JSON, которые возвращаются с контроллера, используя функцию jquery $.ajax(). Вот мой «Логин/процесс» Контроллер нижеПроблема с CodeIgniter Форма входа с JQuery

 public function process() { 
      $this->form_validation->set_rules('email','Email Address','trim|required|xss_clean'); 
      $this->form_validation->set_rules('passwd','Password','trim|required|xss_clean|md5|callback_check_database'); 

      $red = ($this->input->post('redirect_url')) ? $this->input->post('redirect_url') : null; 
      if ($this->form_validation->run() == false) { 
       $output = '{ "success": "no", "redirct": "' . $red . '", "err" : "' .validation_errors() . '" }' ; 
      } else { 
       //Go to private area 
       $output = '{ "success": "yes", "redirct": "account" , "err" : ""}'; 
      } 
     } 

     header('Content-Type: application/json', true); 
     echo json_encode($output); 
    } 
} 

Вот часть моего зрения ниже:

<script type='text/javascript' language='javascript'> 
    $(document).ready(function() { 
     $("#LoginForm").on("submit",function() { 
      var datastring = 'email='+$("#email").val()+'&passwd='+$("#passwd").val()+'&redirect_url='+$("#redirect_url").val(); 
      $.ajax({ 
       type: "POST", 
       url: "<?= base_url("login/process") ?>", 
       dataType: "json", 
       data: datastring, 
       cache: false, 
       success: function(output) { 
        // alert(output.success); 
        if (output.success == 'yes') { 
         document.location.href=output.redirct 
        } 
        if (output.success == 'no') { 
         alert(output.err) 
        } 
       } 
       }) 
      return false; // To prevent form submission 
      }) 
    }); 
</script> 

Когда я пытался отладить с FireBug, ниже, что я получил как ответ POST

"{ \"success\": \"no\", \"redirct\": \"messaging.php\", \"err\" : \"<p>The Password field is required.<\/p>\n\" }" 

ответ

1

Вы не можете использовать json_encode в строке json. Это для кодирования массивов как строка json . Я бы предложил вам определить $ output в виде массива, а затем использовать json_encode (он также менее подвержен ошибкам):

$output = array("success" => "no", "redirect" => $red, "err" => validation_errors()); 

echo json_encode($output); 
+0

Большое спасибо. Он работал отлично сейчас ... THANKS – Toni

+1

Нет проблем. Тогда, пожалуйста, примите ответ, так что всем ясно, что ваш вопрос больше не открыт. –

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