2013-07-05 71 views
1

我一直在嘗試使用CakePHP 1.3實現ajax登錄。我有一個簡單的用戶名/密碼登錄彈出。雖然json格式的迴應是正確的,但Ajax json總是返回錯誤

以下是在我的意見/元件/ login.ctp

echo $this->Form->create('User', array('url'=>array('controller'=>'users','action'=>'login'), 'id'=>'user_login')); 
echo $this->Form->input('username'); 
echo $this->Form->input('password'); 
echo $this->Form->end('Login')); 

以下是在我的控制器控制器/ users_controller.php中

public function ajax_login() { 

    $response = array('success'=>false); 

     if($this->RequestHandler->isPost()) { 
     if($this->Auth->login()) { 
      $response = array('success'=>"true"); 
     } else { 
      $response = array('success'=>false); 
     } 
     } 
     $this->set('response', $response); 

} 

用於上述控制器的視圖is under views/users/ajax_login.ctp只有這條線:

echo $javascript->object(isset($response) ? $response : array()); 

我阿賈克斯具有下面的代碼:

function login_user(){ 

    var username = $("#UserUsername").val(); 
    var password = $("#UserPassword").val(); 

    if(username == "" || username == null || password == "" || password == null){ 
     alert("Please enter a username and password"); 
     return false; 
    } 

    $.ajax({ 
     url:"https://stackoverflow.com/users/ajax_login", 
     type:"POST", 
     data:$('#user_login').serialize(), 
     dataType:"json", 
     async: true, 
    success: function() { console.log("success"); }, 
    error: function(msg) { console.log(msg); } 
    }); 

    return false; 
} 

現在,似乎一切都可以正常使用,但是,它始終未能進入「錯誤」回調,我不知道爲什麼。我已經閱讀了下面的所有關於stackoverflow的鏈接,並且它們都不是問題!

Weird JSON behavior when requesting a json file via $.ajax malformed JSON while JSON is valid? Ajax error result with struts2 json_encode creating a malformed JSON (with extra hidden character) php json_encode not returning proper json encoded string

我懷疑的唯一的事情是,當我讀到錯誤的console.log(msg),我得到正確的HTML響應{ 「成功」:真正}這是在正確的格式...但是...「responseText」我得到這樣的東西:

responseText:「 { 「成功」:真正}!< - 0.375s - > 「

所以基本上即時猜測它的這種」 < - 0.375s - >「這是造成JSON格式總是失敗!我的阿賈克斯電話。我不知道這是CakePHP問題,還是AJAX/JSON問題!...我已經工作了超過5年,現在我的工作已經完成卡住!

回答

2

確實字符串<!-- 0.375s -->正在破壞你的代碼。試着找出它來自哪裏。一些步驟:

  1. 你使用什麼佈局來渲染它?在你的控制器中嘗試debug($this->layout),看看它是哪一個。這可能很好,因爲我沒有看到你將佈局設置爲ajax。蛋糕有這個ajax佈局,這本質上是一個空的佈局。它在CakePHP 1.3中不應該包含任何超過echo $content_for_layout;的內容。
  2. 檢查並確保你的「吐出」UTF-8編碼。這是JSON必須的。
  3. 嘗試用echo json_encode($response);替換當前視圖代碼或保留三方檢查:echo isset($response) ? json_encode($response) : '';無論如何,JavaScriptHelper都會採用相同的方式。
  4. 這個「奇怪的字符串」可能是一些性能分析器的「渲染時間」評論。它從你的應用程序的某個地方來,你可以看到它是一個HTML註釋。在Config/core.php降低您調試值 - 我猜測它是3

我猜測,檢查佈局,將其設置爲ajaxempty將解決你的問題。

+1

Sabev先生,生活救星。此外,我真的很喜歡你剔除問題的方式。從上面我嘗試了所有前3種方法。不幸的是,他們沒有工作,因爲我已經使用UTF-8,無論我喜不喜歡(阿拉伯文內容)。不過,多虧了你,我開始使用良好的練習(尤其是我開始使用'ajax'佈局作爲優秀練習),儘管這並沒有解決它! ,但「櫻桃在上面」它,#4是造成它的原因。在我的core.php我只是簡單地改變了調試模式從Configure :: write('debug',3); Configure :: write('debug',0); poof!解決了! – Amjo

+1

@Amjo然後一定要接受答案,並upvote它。 ;) –

+0

對不起,我不能投票,但我批准了答案。聲譽不會讓我投票。 chherz :) – Amjo