我在remote=true上有一个简单的表单。
该表单实际上位于一个HTML对话框中,一旦单击Submit按钮,该对话框就会关闭。
现在,在表单成功提交后,我需要对HTML主页面进行一些更改。
我使用jQuery进行了尝试。但这并不能确保在表单提交的某种形式的响应之后执行任务。
$("#myform").submit(function(event) {
// do the task here ..
});
如何附加回调,以便只有在表单成功提交后才执行代码?有没有办法在表单中添加一些.success或.complete回调?
发布于 2012-07-18 22:04:51
我就这么做了-
$("#myform").bind('ajax:complete', function() {
// tasks to do
});
一切都运行得很完美。
有关更具体的详细信息,请参阅this api documentation。
发布于 2013-08-07 01:27:30
我不能让排名第一的解决方案可靠地工作,但我发现它是有效的。我不确定它是否是必需的,但我在标记上没有操作或方法属性,它确保POST由$.ajax函数处理,并为您提供回调选项。
<form id="form">
...
<button type="submit"></button>
</form>
<script>
$(document).ready(function() {
$("#form_selector").submit(function() {
$.ajax({
type: "POST",
url: "form_handler.php",
data: $(this).serialize(),
success: function() {
// callback code here
}
})
})
})
</script>
发布于 2014-02-07 04:50:47
对于MVC来说,这里有一种更简单的方法。您需要使用Ajax表单并设置AjaxOptions
@using (Ajax.BeginForm("UploadTrainingMedia", "CreateTest", new AjaxOptions() { HttpMethod = "POST", OnComplete = "displayUploadMediaMsg" }, new { enctype = "multipart/form-data", id = "frmUploadTrainingMedia" }))
{
... html for form
}
以下是提交代码,它位于文档就绪部分,并将按钮的onclick事件绑定到提交表单
$("#btnSubmitFileUpload").click(function(e){
e.preventDefault();
$("#frmUploadTrainingMedia").submit();
});
下面是在AjaxOptions中引用的回调
function displayUploadMediaMsg(d){
var rslt = $.parseJSON(d.responseText);
if (rslt.statusCode == 200){
$().toastmessage("showSuccessToast", rslt.status);
}
else{
$().toastmessage("showErrorToast", rslt.status);
}
}
在MVC的控制器方法中,它看起来像这样
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult UploadTrainingMedia(IEnumerable<HttpPostedFileBase> files)
{
if (files != null)
{
foreach (var file in files)
{
// there is only one file ... do something with it
}
return Json(new
{
statusCode = 200,
status = "File uploaded",
file = "",
}, "text/html");
}
else
{
return Json(new
{
statusCode = 400,
status = "Unable to upload file",
file = "",
}, "text/html");
}
}
https://stackoverflow.com/questions/11534690
复制相似问题