我正在发送一些带有ajax的json数据
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!");
}
});
}
到我的控制器
[HttpPost]
public ActionResult Summary(List<string> flagsChecked)
{
[...]
return View(flags);
}
并尝试使用我已经处理的数据返回一个视图,但我想这不会发生,因为ajax是关于异步http请求的。如何将代码更改为同步?
答案 0 :(得分:2)
使用ajax背后的整个想法是为用户提供部分页面更新体验。如果您正在进行ajax调用,并且一旦完成并且您正在重定向到另一个页面,则它不会向用户提供部分页面更新体验。它看起来与普通表单提交非常相似(整页提交)。
如果您必须通过ajax将数据发送到服务器,但想在ajax调用成功完成后进行重定向,则可以使用success
或done
回调中的javascript来执行此操作$.ajax
方法上的事件。
您所要做的就是将location.href
属性设置为新网址。
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);
});
这假设您的服务器操作方法返回带有newUrl
属性的JSON响应,该属性包含您要重定向到的URL。
[HttpPost]
public ActionResult Summary(List<string> flagsChecked)
{
return Json(new { newUrl = Url.Action("Index","Home") });
}
答案 1 :(得分:1)
执行此操作的一种方法是通过ajax将请求发送到控制器,然后在页面上呈现部分视图。最简单的方法是使用built in ajax helpers in ASP MVC。这是另一篇文章的链接,提供了很好的概述:
How to render partial view in MVC5 via ajax call to a controller and return HTML