2013-11-04 12 views
7

ich eine Ajax-Anfrage wie folgt mache:Aufruf Response.redirect durch Ajax

$(".box01 .selproduct").live("click", function(e) { 
    var color = $(this).parent('.box01').find('.color').val(); 
    var size = $(this).parent('.box01').find('.size').val(); 
    var pid=$(this).parent('.box01').find('.hdinput').val(); 
    var pathname = window.location.pathname; 
    var data = { submit: "selected",size:size,color:color,pid: pid}; 
    $.ajax({ 
     type: "POST", 
     url: pathname, 
     data: data, 
     success: function(data) { 

     }, 
     error: function(XMLHttpRequest, textStatus, errorThrown) { 

     }, 
     complete: function(data) { 

     } 
    }); 
    return false; 
}); 

Und in der Server-Seite habe ich einige Code wie folgt geschehen:

if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["pid"])) 
    { 
     var path = HttpContext.Current.Request.Url.AbsolutePath; 
     HttpContext.Current.Response.Redirect(path); 
    } 

Ajax POST funktioniert gut. Ich kann in Web Developer Tools in Mozilla sehen, aber Seite wird nicht auf andere Seite umgeleitet, wie ich vermutete. Kann mir jemand sagen, was ich falsch mache?

Oder ist es nicht möglich, Response.Redirect über Ajax aufzurufen?

+2

Durch die Art und Weise leben ist depreceated, sollten Sie auf http://api.jquery.com/live/ verwenden – adt

Antwort

11

Ja, meines Wissens kann man die Umleitung nicht einfach von der Clientseite aus erkennen. Das Bezugs andere Antworten wie diese:

Eine Sache, die Sie tun können, ist, wie etwas zurückgeben, die eine Umleitung von Ihrem serverseitigen Code angibt. Etwas wie das folgende JSON:

{ 
    success: true, 
    redirect: true, 
    redirectURL = "http://something.com/path/to/good/stuff" 
} 

Wie Sie das oben genannte in Ihrem serverseitigen Code erreichen, liegt an Ihnen.

Dann in Ihrem clientseitigen Code Sie folgendes tun können:

$.ajax({ 
    type: "POST", 
    url: pathname, 
    data: data, 
    success: function(data) { 
     if(data.redirect) { 
     window.location = data.redirectURL; 
     } 
    }, 
5

Es ist unmöglich, Response.Redirect in WebMethod aufzurufen. Stattdessen können Sie in Ajax Success-Funktion

verwenden.

Wenn der Seitenname dynamisch ist, geben Sie den Seitennamen von webmethod zurück und verwenden Sie ihn, um die Seite umzuleiten.