我有一个对话框,其中包含名称和ID为“buildtask”的表单。用Firebug看它就完全成型了。 jquery代码与同一页面上其他成功的对话框表单提交相同。
问题似乎与$(this).dialog("close");
有关,因为如果我对此进行评论,则调用的ajax php脚本可以更新数据库并回显我可以通过Firebug看到的一段文本。当然,对话框会保留在屏幕上。
删除注释后,数据库更新失败,而在Firebug中显示帖子数据时,响应选项卡丢失,并显示大小为0B。
我尝试移动$(this).dialog("close");
中的function(data){ }
,但它会在屏幕上显示对话框。
我已经用问题的每一个组合搜索了Stackoverflow,但没有任何快乐,而且我已经乱七八小时了。
buttons: {
"Update": function() {$.post("ajax/udTManage.php", $("#buildtask").serialize(),function(data){alert("Here");});
$( this ).dialog( "close" );
},
"Cancel": function() {
$( this ).dialog( "close" );
}
},
close: function() {
$("#buildtask").remove();
$('#tasker').submit();
}
答案 0 :(得分:1)
您应该将$( this ).dialog( "close" );
移到function(data){}
,以确保在完成发送请求之前不会解除表单。
尽管如此,由于AJAX调用触发了事件,因此使用$( this )
引用请求而不是对话框。
因此,您应该通过它的id来调用窗口,并执行以下操作:$("#buildtask").dialog("close");
然后它会起作用。
答案 1 :(得分:0)
请注意,关闭函数中的代码将在您单击“更新”或“取消”时执行。如果单击“更新”,则删除#buildtask并在udTManage.php仍在执行时提交#tasker。
在不了解您的过程的情况下,很难确定它的失败位置,但有一种猜测是,udTManage.php中发生的任何事情都需要在#tasker提交之前完成。是这样的吗?如果是这样,以下应解决问题:
buttons: {
"Update": function() {
$.post(
"ajax/udTManage.php",
$("buildtask").serialize(),
function(data) {
// anything here is executed AFTER udTManage.php is executed
$('#tasker').submit();
}
);
$(this).dialog("close");
},
"Cancel": function() {
$("tasker").submit(); // assuming you need to submit even when cancelling
$(this).dialog("close");
}
},
close: function() {
// This is executed the moment you click either button (because both buttons immediately call the dialog close method)
$("buildtask").remove(); // not sure why you might need this, though
}