2017-09-26 1 views
0

Ich versuche URL zu umleiten, URL immer wenn mein Server 403 im Statuscode sendet.Redirect URL funktioniert nicht mit AJAX synchrone Anrufe

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") 
    } 

Es werden sowohl die console.logs gedruckt, vor der Umleitung und nach der Umleitung. aber Umleitung geschieht nicht. Es funktioniert gut, wenn ich gebe async: true.

Ich versuchte mit window.location.assign(), window.location.replace(), location.href und alle anderen Lösungen in ähnlichen Frage Threads gegeben. Nichts scheint bekommen in meinem Fall

+2

Machen Sie einen Schritt zurück und überlegen, warum Sie möglicherweise einen synchronen Aufruf verwenden möchte? Es ist fast nie notwendig, es verursacht schreckliche UX für den Benutzer (sperrt den Browser, der sie denken lässt, dass es abgestürzt ist, wenn die Anfrage länger dauert als normal) und in manchen Browsern sogar veraltet ist, so dass Sie es erwarten können in Zukunft nicht mehr arbeiten. Was ist der Grund dafür, dass Sie einen synchronen Anruf benötigen? Sie implementieren Callbacks ordnungsgemäß für Erfolg/Fehler, es ist also kein Missverständnis des asynchronen Codeflusses, wie ich manchmal sehe. – ADyson

+0

Diese spezielle Funktion wird an mehreren Stellen in meinem Projekt verwendet. Wenn ich den Aufruf jetzt asynchron mache, muss ich alle Auswirkungen prüfen, was Zeit kostet. Daher wollte ich wissen, ob es eine schnelle Lösung gibt, bei der die Anfrage synchron gesendet wird selbst – Jerry

+1

In diesem Fall würde ich einen Test für den spezifischen Status-Code in den "Fehler" Callback für jetzt. – ADyson

Antwort

-1

Zunächst Ihren Anruf zurück Wert zu arbeiten, danach Ihren Zustand überprüfen wie folgt aus:

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

Yuk. Besser, den "Fehler" -Rückruf einzuplanen. Wenn der Code später async gemacht wird, wird er aufgrund dieses Codes nicht umfallen. – ADyson