2013-04-01 55 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

沒問題。然後請接受答案,以便其他人清楚您的問題不再公開。 –