民间,
我正在通过修补来学习Ajax。首先,我有一个带有按钮的表单,该表单对虚拟控制器动作进行了Ajax调用。客户端上的HTML和JavaScript。1个
<form method="post">
<button name="btnSaveProject" title="When you save this project, it willl be available for 30 days.">
Save
</button>
</form>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.1.min.js"></script>
<script>
$(document).ready(function () {
$("button[name='btnSaveProject']").click(function () {
console.log("make ajax call");
$.ajax({
url: "/Project/Save",
type: "GET",
timeout: 8000,
cache: false
}).done(function () {
console.log("ajax call successful");
}).fail(function (jqXHR, textStatus) {
console.log("something went awry. " + textStatus);
}).then(function () {
console.log("always just in case");
});
});
});
</script>
当我单击按钮时发生了一件奇怪的事情。Ajax调用将到达服务器(我知道thin,因为我在控制器操作中有一个断点,该断点已触发)。但无论既不是.done()
,也不是.fail()
,也不.always()
是接到回访电话的客户端。
然后我提出<button>
出去的<form>
,现在.done()
和.always()
预期得到叫回来。Can Ajax调用之间似乎存在一些相互作用。这是什么相互作用?在哪里可以了解更多信息?为了能够在A内使用Ajax,我该<form>
怎么办?
这是服务器端代码,但我怀疑这不是一个因素。
// AJAX: /Project/Save
public ActionResult Save() {
System.Threading.Thread.Sleep(600); /// <bring-up>A bit of latency to make the Ajax call more noticeable.</bring-up>
return Json("lorem ipsum", JsonRequestBehavior.AllowGet);
}
1 我已经精简了代码,只保留了我认为适用于该问题的部分。如果我精简了太多,请让我知道:我将发布更多代码。
您可以在按钮中添加类型:
<button type="button" name="btnSaveProject"
或仅阻止按钮的默认值提交表单event.preventDefault()
:
$("button[name='btnSaveProject']").click(function (e) {
e.preventDefault();
// other code as is
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句