2017-09-26 27 views
0

我試圖重定向url來登錄url,只要我的服務器在狀態碼中發送403。重定向url無法與ajax同步調用

function processget_sync(data1, url1, handler) 
{ 
    url1=server_url + url1; 
    data1=JSON.stringify(data1); 
    jQuery.ajax({ 
     type : "GET", 
     url : url1, 
     dataType : "json", 
     contentType : "application/json; charset=utf-8", 
     cache : false, 
     async: false, 
     statusCode: { 
       403:function(){ 
        redirectFunction(); 
       } 
     }, 
     success : function(ret) { 
      handler(ret,null); 
     }, 
     error : function(err) { 
      handler(null,err); 

     } 
    }); 


function redirectFunction(){ 
    console.log("before redirection") 
    window.location.href = "../signin/index.html"; 
    console.log("after redirection") 
    } 

它既是console.logs打印,重定向之前和重定向之後。但重定向沒有發生。它工作正常,如果我給異步:真。我試過使用window.location.assign(),window.location.replace(),location.href和所有其他解決方案給出的類似問題的線程。一切似乎都在我的情況下工作

+2

退一步,考慮你爲什麼會可能要使用同步調用?它幾乎沒有必要,它會給用戶帶來可怕的用戶體驗(鎖定瀏覽器,如果請求花費的時間超過正常,這可能會讓他們認爲它已經崩潰),甚至在某些瀏覽器中不推薦使用,所以您可以合理地期待它今後完全停止工作。你認爲需要同步呼叫的原因是什麼?你正在爲成功/錯誤正確地實現回調,所以它不是對異步代碼流的誤解,就像我有時看到的那樣。 – ADyson

+0

這個特殊的功能正在我的項目中的多個地方使用,所以如果我現在調用異步,我需要檢查所有需要時間的影響,所以我想知道是否有一個快速修復請求被同步發送本身 – Jerry

+1

在這種情況下,我現在將對「錯誤」回調中的特定狀態代碼進行測試。 – ADyson

回答

-1

最初讓您回電值,之後檢查你的條件是這樣的:

success: function(data){ 
    callback(data); 
} 
if(data == true){ 
window.location.href = "../signin/index.html"; 
} 
+0

喲。最好檢查「錯誤」回調。然後當代碼稍後進行異步操作時,由於這個範圍外的代碼,它不會翻轉。 – ADyson