【发布时间】:2013-09-25 15:20:33
【问题描述】:
我有一个 ASP.Net MVC 视图,可以将表单数据提交给控制器操作。我正在尝试使用 jQuery 通过 AJAX 调用发布表单,如下所示:
$("#submit").click(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "/controller/action",
data: $("#form").serialize()
});
});
这很好用,表单数据就像我想要的那样发布到控制器。问题是控制器操作返回重定向,并且在提交表单后,浏览器不会重定向到重定向响应中指定的 url 的位置。使用 Fiddler,我可以看到控制器确实返回了重定向,并且针对重定向指定的位置发出了请求,但浏览器从未真正重定向,单击处理程序运行后仍显示表单页面。
我尝试将成功处理程序添加到设置window.location 的$.ajax 调用。这可行,但是由于几个原因,它似乎不太理想。首先,由于我不知道如何在成功处理程序中获取重定向位置,因此我必须对该位置进行硬编码。其次,在成功处理程序中执行重定向实际上会导致向重定向位置发出两个请求。我想知道是否有更好的方法来获取 $.ajax 调用以兑现服务器返回的重定向。
【问题讨论】:
-
这里没有看到任何重定向相关的代码。
-
你为什么要使用 ajax?如果您希望它重定向,这是表单发布到重定向操作页面的默认功能。只需删除您的点击事件处理程序并将表单的操作设置为您的控制器。
-
@KevinB:我们使用 AJAX 是因为原生表单提交遇到了性能问题,大概是因为要发布大量数据。原生表单发布在 Chrome 中需要 > 30 秒,AJAX 在亚秒范围内运行。不幸的是,更改表单以使其包含更少的数据不是一种选择。
-
这没有任何意义...... ajax 与本机提交不应该更快或更慢。
标签: javascript jquery ajax