2013-04-01 56 views
0

我正在使用CodeIgniter,并试图捕获从控制器使用jquery $.ajax()函数返回的JSON值。 这里是我的“登录/过程”下面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> 

当我试图用萤火调试,下面是我得到的POST响应

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

回答

1

您不能在json字符串上使用json_encode。它用于将数组编码为一个json字符串 。我建议你将$ output定义为一个数组,然后使用json_encode(它也不太容易出错):

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

echo json_encode($output); 
+0

非常感谢。现在它工作得很好......谢谢 – Toni

+1

没问题。然后请接受答案,以便其他人清楚您的问题不再公开。 –