2013-04-04 87 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