2013-11-04 78 views
7

我想提出一个Ajax请求是这样的:调用的Response.Redirect通过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; 
}); 

而在服务器端我已经做了一些这样的代码:

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

Ajax的POST工作正常。我可以在Mozilla浏览器工具中看到,但是页面没有按照我的设想重定向到其他页面。任何人都可以告诉我我做错了什么?

还是无法调用Response.Redirect通过Ajax?

+2

通过直播的方式depreceated,你应该http://api.jquery.com/live/使用 – adt

回答

11

是啊,据我所知,你不能简单地检测来自客户端的重定向。参考其他答案喜欢这些:

一件事是怎么回事情,表示从服务器端代码中的重定向。类似于以下JSON:

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

如何在服务器端代码中实现上述目标取决于您。

然后在您的客户端代码,你可以做到以下几点:

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

这是不可能调用的Response.Redirect中的WebMethod。相反,您可以使用

success: function(data) { 
    window.location.href="path.aspx"; 
     } 

in ajax Success函数。

如果页面名称是来自大自然的WebMethod返回页面名称动态,并用它来重定向页面。