2012-09-11 239 views
2

你好,我有一個Ajax json請求的問題。即使請求成功,我總是會收到錯誤。目前我有這樣的代碼:ajax json請求,總是返回錯誤

function sumbitLoginForm(user, pass) { 
    if (user.trim() == '' || pass.trim() == '') { 
     alert("You must enter username and password!"); 
    } else { 
     $.ajax({ 
      type : 'POST', 
      url : 'https://url.php', 
      dataType : 'json', 
      data : { 
       userlogin : user, 
       userpass : pass 
      }, 
      contentType: "application/json;", 
      success : function(data) { 
       $("#images").html("uspeshno"); 
      }, 
      error : function(data) { 
       $("#images").html("greshka"); 
      } 
     }); 
     } 

    return false; 
} 

$(document).ready(function() { 
    clearPageInputs(); 
    $("#submitButton").click(function() { 
     sumbitLoginForm($("#username").val(), $("#password").val()); 
    }); 
}); 

無論輸入什麼用戶名和密碼,我都會收到錯誤。但請求的狀態正在改變,如果我輸入正確的用戶並通過我得到狀態302臨時移動,但是當我輸入錯誤的用戶或通過我得到狀態200確定。我究竟做錯了什麼 ?

+0

和clearPageInputs()在做什麼? – Jignesh

+0

'function clearPageInputs(){ \t $(「input [type = text]」)。val(''); }' –

+0

您的網址錯誤。看看錯誤的身體,你會發現真正的網址 – Ilya

回答

0

PRG模式和Ajax

它看起來像你的服務器返回一個HTTP 200狀態碼,當用戶ID和密碼不會驗證。這是正確的行爲,因爲HTTP錯誤代碼不是用於應用程序錯誤,而是用於HTTP協議錯誤。

當用戶標識和密碼成功匹配時,您被重定向到另一個頁面。這也是正常的行爲,例如以防止其他人使用後退鍵重新使用您的登錄憑證。

這被稱爲郵政/重定向/獲取模式。

參見:http://en.wikipedia.org/wiki/Post/Redirect/Get

的問題是,PRG模式沒有發揮好與Ajax應用程序。重定向應該由瀏覽器處理。因此它對於jQuery代碼是透明的。 Ajax html響應將是302的位置標題中提到的頁面。您的Ajax應用程序將無法看到它正在被重定向。所以你的卡住了。

在我的一個項目中,我在服務器端解決了這個問題。如果我檢測到一個Ajax調用,我不會發送重定向,而是一個正常的200響應。這隻適用於您有權訪問服務器代碼的情況。

如果您無法更改Ajax調用的重定向,那麼您可以解析響應標頭或html以查看您是否被重定向並相應地執行操作。可能登錄會設置一個cookie,所以你可以嘗試查找該cookie的存在。