Javascript <;表格>;和.ajax()
各位 我正在通过修补学习Ajax。起初,我有一个带有按钮的表单,它对一个虚拟控制器动作进行了Ajax调用。客户端的HTML和JavaScript。1Javascript <;表格>;和.ajax(),javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,各位 我正在通过修补学习Ajax。起初,我有一个带有按钮的表单,它对一个虚拟控制器动作进行了Ajax调用。客户端的HTML和JavaScript。1 拯救 $(文档).ready(函数(){ $(“按钮[name='btnSaveProject'])。单击(函数(){ log(“进行ajax调用”); $.ajax({ url:“/Project/Save”, 键入:“获取”, 超时:8000, 缓存:false }).done(函数(){ log(“ajax调用成功”); }).fail
拯救
$(文档).ready(函数(){
$(“按钮[name='btnSaveProject'])。单击(函数(){
log(“进行ajax调用”);
$.ajax({
url:“/Project/Save”,
键入:“获取”,
超时:8000,
缓存:false
}).done(函数(){
log(“ajax调用成功”);
}).fail(函数(jqXHR,textStatus){
log(“出错了。”+textStatus);
}).然后(函数(){
log(“总是以防万一”);
});
});
});
当我点击按钮时,发生了一件奇怪的事情。Ajax调用将到达服务器(我知道这一点,因为我在控制器操作中有一个断点,触发了这个断点)。但是,无论是.done()
,还是.fail()
,还是.always()
都没有在客户端被回调
然后我将
从
中移出,现在.done()
和.always()
按预期被回调。can Ajax调用之间似乎存在一些相互作用。这种相互作用是什么?我在哪里可以了解更多?我必须做什么才能在
中使用Ajax
这是服务器端代码,但我怀疑这不是一个因素
//AJAX:/Project/Save
公共操作结果保存(){
System.Threading.Thread.Sleep(600);///有一点延迟,使Ajax调用更引人注目。
返回Json(“lorem ipsum”,JsonRequestBehavior.AllowGet);
}
1我已将代码剥离,仅保留我认为适用于该问题的部分。如果我精简了太多内容,请告诉我:我将发布更多代码。由于按钮是在表单中,其默认单击操作是提交表单,因此,在您的情况下,一旦发送ajax请求,就会提交实际的页面,我认为这是在重新加载页面,导致回调处理程序卸载,这就是为什么没有调用这些页面的原因 一种解决方案是通过调用 但由于您使用的是表单,因此最好使用表单提交事件,而不是按钮单击事件,如
$(document).ready(function () {
$("form").submit(function (e) {
//prevent the default action of the button click which is to submit the form
e.preventDefault()
console.log("make ajax call");
//your ajax code
});
});
另一个选项是将按钮的类型设置为按钮
,以便表单提交不会像
<button type="button" name="btnSaveProject" title="When you save this project, it willl be available for 30 days.">Save</button>
保存
您可以向按钮添加类型:
<button type="button" name="btnSaveProject"
<button type="button" name="btnSaveProject"
$("button[name='btnSaveProject']").click(function (e) {
e.preventDefault();
// other code as is
});