2017-11-10 73 views
0

我郵寄後阿賈克斯後返回查看到控制器

function SendF() { 

$.ajax({ 
    url: '@Url.Action("Summary")', 
    type: 'POST', 
    data: JSON.stringify(flags), 
    contentType: "application/json;charset=utf-8", 
    success: function() { 

    }, 
    error: function() { 
     alert("Oops! We've experienced a connection problem!"); 
    } 
}); 
} 

使用Ajax發送一些JSON數據到我的控制器

[HttpPost] 
     public ActionResult Summary(List<string> flagsChecked) 
     { 

      [...] 

       return View(flags); 
     } 

,並試圖返回與數據的視圖我已經處理,但我想這不會發生,因爲ajax是關於異步http請求的。如何將我的代碼更改爲同步?

+2

進行ajax調用,然後使用'window.location.href'是毫無意義的。您的方法需要返回一個局部視圖,然後在回調中更新DOM的某個部分,例如'成功:function(data){$(someElement).html(data); }' –

+0

我意識到,但粘貼了舊的代碼。抱歉。無論如何,我更喜歡改變它不是異步的,所以我不需要像你描述的那樣改變整個視圖 –

+0

對不起,你最後的評論沒有任何意義 - 它與異步或同步無關 –

回答

2

背後使用Ajax整個想法是給用戶的部分頁面更新體驗。如果您正在進行ajax調用,並且一旦完成並且您正在重定向到另一個頁面,則它不會爲用戶提供部分頁面更新體驗。它看起來非常類似於正常表單提交(整頁提交)。

如果你絕對要通過AJAX將數據發送到服務器,但是想做重定向後Ajax調用成功完成,你可以做到這一點在上$.ajax方法successdone回調事件使用JavaScript。

您只需將location.href屬性設置爲新的url。

var flags = ["aa", "bb", "cc"]; 

$.ajax({ 
    url: '@Url.Action("Summary")', 
    type: 'POST', 
    data: JSON.stringify(flags), 
    contentType: "application/json;charset=utf-8" 
}).done(function(res) { 
    window.location.href = res.newUrl; 
}).fail(function(xhr, a, error) { 
     console.log(error); 
}); 

這是假設你的服務器操作方法返回包含您想重定向到URL中的newUrl財產的JSON響應。

[HttpPost] 
public ActionResult Summary(List<string> flagsChecked) 
{ 
    return Json(new { newUrl = Url.Action("Index","Home") }); 
} 
+0

我認爲這是一個有效的解決方案,但這不是我的觀點。我需要創建另一個問題,不要再搞亂了。 –