2013-11-04 15 views
7

Robię żądania Ajax tak:Wywołanie response.redirect przez 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; 
}); 

A na stronie serwera Zrobiłem trochę kodu tak:

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

Ajax POST działa dobrze. Widzę w Narzędziach dla webmasterów w mozilli, ale strona nie jest przekierowywana na inną stronę, tak jak przypuszczałem. Czy ktoś może mi powiedzieć, co robię źle?

Czy nie można wywołać Response.Redirect przez Ajax?

+2

Nawiasem mówiąc Live jest depreceated, należy użyć na http://api.jquery.com/live/ – adt

Odpowiedz

11

Tak, według mojej wiedzy, nie można po prostu wykryć przekierowania ze strony klienta. Odwoływać inne odpowiedzi, takie jak:

Jedną rzeczą, jaką można zrobić, to w jaki sposób powrócić coś, co wskazuje przekierowanie z kodu po stronie serwera. Coś w rodzaju następującego JSON:

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

Sposób, w jaki osiągniesz powyższy kod po stronie serwera, zależy od Ciebie.

Następnie w kodzie strony klienta można wykonać następujące czynności:

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

Nie można wywołać Response.Redirect w WebMethod. Zamiast tego można użyć funkcji

w funkcji ajax Success.

Jeśli nazwa strony ma charakter dynamiczny, zwróć nazwę strony z webmethod i użyj jej do przekierowania strony.

Powiązane problemy