2013-11-15 178 views
31

下列不重定向我的網頁:這裏是MVC代碼:RedirectToAction不成功後jquery ajax後成功?

[HttpPost] 
    public ActionResult GoHome() 
    { 
     return RedirectToAction("Index", "Home"); 
    } 

這裏是ajax開機自檢:

$.support.cors = true; 

      $.ajax({ 
       type: "POST", 
       url: "http://localhost/UserAccount/GoHome", 
       dataType: 'json', 
       crossDomain: true 
      }); 

的職位是成功的,當它hists的GOHOME動作它不重定向到主控制器的索引操作。

+0

'$ .support.cors = TRUE;'是沒有必要的。 'crossDomain:true'不需要。 –

回答

55

您無法從AJAX帖子重定向。您可以返回您想重定向瀏覽器的URL,然後從Javascript重定向。

控制器

[HttpPost] 
public ActionResult GoHome() 
{ 
    return Json(Url.Action("Index", "Home")); 
} 

的Javascript

 $.ajax({ 
      type: "POST", 
      url: "http://localhost/UserAccount/GoHome", 
      dataType: 'json', 
      crossDomain: true, 
      success: function(data){ 
       window.location.href = data; 
      } 
     }); 
+0

嗨,這是否主要是爲了安全,所以你不能將用戶瀏覽器重定向到可能有惡意腳本的頁面? – xaisoft

+0

@xaisoft我認爲它比安全性決定更缺乏功能。 –

+0

@xaisoft不,它是一個HTTP限制。在正常的PRG(Post,Redirect,Get)過程中,服務器接收表單POST,處理它並將HTTP 301/302重定向返回到瀏覽器接收並遵循的另一個頁面。 JS/AJAX不知道如何處理301/302重定向,因爲它預計會附帶一個有效負載(Json,HTML,文本)的HTTP 200響應。 – Tommy