Javascript <;表格>;和.ajax()

Javascript <;表格>;和.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

各位

我正在通过修补学习Ajax。起初,我有一个带有按钮的表单,它对一个虚拟控制器动作进行了Ajax调用。客户端的HTML和JavaScript。1


拯救

$(文档).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
});