2013-04-04 85 views
0

如果我使用发布的解决方案here,我将不会转移到新页面。但是,如果我检查控制台中的$.ajax()调用,实际的.aspx页面似乎在响应正文中。所以我的猜测是.ashx被重定向到.aspx。

void ProcessRequest(HttpContext context) 
{ 
    context.Response.Redirect(newUrl); 
} 

如何从发送ajax请求的.aspx页面重定向用户?我是否需要从我的handler.ashx调用那个.aspx的方法?

回答

1

Response.Redirect命令无非是指示浏览器移动到其他页面。该命令首先是浏览器的头部指令。还有一个JavaScript小脚本写在页面上,以防头失败。

现在,当您使用Ajax进行调用时(无论其处理程序或页面)结果返回到页面但在ajax缓冲区内部时,重定向头文件将被“吃掉”,而不会去浏览器本身运行他们。所以不能通过ajax调用直接完成重定向。

你应该做的,就是一个信号返回到您的Ajax调用,并看到信号/标志,并使用JavaScript调用window.location.replace("redirectPage.aspx")

例如,像使重定向:

$.ajax({ 
    url: "action.ashx", 
    type: "GET", 
    dataType: 'json', 
    success: function(data)  
    { 
     if(data.NeedRedirect) 
      window.location.replace("WhereToMove.aspx"); 
    }, 
    error: function(responseText, textStatus, XMLHttpRequest) 
    { 
     window.location.replace("WhereToMove.aspx"); 
    } 
}); 
+0

谢谢,但是有什么办法可以从ashx文件中引用aspx httpcontext,以便我可以在服务器代码中创建transfter? – Johan 2013-04-04 12:02:02

+0

@Johan你不会在服务器代码中进行任何传输。服务器代码仅写入并发送一些html页面,其中包含一些用于传输的头文件。您认为传输是在服务器上进行的,因为浏览器不会显示中间页面。 – Aristos 2013-04-04 12:04:06

+0

@Johan如果你的处理程序没有在ajax上返回任何数据,为了使重定向工作,只需将其作为任何页面调用它没有Ajax。例如,作为链接,或与JavaScript,你可以调用它与window.location.replace()...等(不ajax和重定向工作) – Aristos 2013-04-04 12:05:34