仍在寻找解决方案,但还没有找到,我有一个功能来管理相同/不同页面上的不同表单
function formStantardAction(correctAnswer,addCustomData){
addCustomData = (typeof addCustomData == "undefined")?'':addCustomData;
correctAnswer = (typeof correctAnswer == "undefined")?'Saved.':correctAnswer;
$('form.standard').submit(function(event){
event.preventDefault();
var modalWin = $(this).parent();
var values = $('form.standard').serialize() + addCustomData;
$.ajax({
url: "inc/gateway.php",
data: values,
type: "POST",
success: function(data){
if (data == "OK"){
$(modalWin).html(correctAnswer).delay(500).fadeOut(500);
setTimeout(function() {
mw_close();
}, 1000);
}else{
alert(data);
}
}
});
});
}使用名为SEND的输入按钮“type=”加载页面和表单后
$('form.standard [name="SEND"]').click(function(){
var str = $('#sortableTo').serializelist();
formStantardAction('New train inserted.',str);
$('form.standard').submit();
});所有的值通过POST到达一个php页面,这个页面完成了所有的事情(验证,在数据库中插入,更新日志...)如果一切正常,则用' OK‘回答(因此模式窗口中的窗体将被自定义消息替换并淡出),或者...如果出现错误,php会用js弹出的一些文本进行响应,并发出警告,使模式窗口与表单一起打开。
这一切都好,但是,如果php回答了一个错误,第二次点击发送按钮,帖子发送了2次。如果我在第二次发送时再次出错,并再次单击发送按钮,则post值将发送三次……诸若此类。
我能做什么?我的错误在哪里?
谢谢。
发布于 2012-06-20 18:27:10
尝试排除提交块:
function formStantardAction(correctAnswer,addCustomData){
addCustomData = (typeof addCustomData == "undefined")?'':addCustomData;
correctAnswer = (typeof correctAnswer == "undefined")?'Saved.':correctAnswer;
//$('form.standard').submit(function(event){
// event.preventDefault();
//change 'this' to form.standard
var modalWin = $('form.standard').parent();
var values = $('form.standard').serialize() + addCustomData;
$.ajax({
url: "inc/gateway.php",
data: values,
type: "POST",
success: function(data){
if (data == "OK"){
$(modalWin).html(correctAnswer).delay(500).fadeOut(500);
setTimeout(function() {
mw_close();
}, 1000);
}else{
alert(data);
}
}
});
});
// }并在加载页面后:
$('form.standard [name="SEND"]').click(function(){
var str = $('#sortableTo').serializelist();
formStantardAction('New train inserted.',str);
//excluding submit event
// $('form.standard').submit();
});因为类型为“Post”的$.ajax {}已经是一个提交进程,然后当脚本调用submit时,它会重新提交。
希望这是正确的,并提供帮助
发布于 2012-06-20 17:55:31
是否可以在每次从ajax请求中获取数据时,在代码中的某处将提交事件绑定到表单?
我无法在您在此处提交的代码中检查这一点。
发布于 2012-06-20 17:58:20
创建一个全局变量作为标志
var flag = 0;在发布时检查此标志,并在完成后将其重置
function formStantardAction(correctAnswer,addCustomData){
**if(flag == 1){
return false;
}
flag = 1;**
addCustomData = (typeof addCustomData == "undefined")?'':addCustomData;
correctAnswer = (typeof correctAnswer == "undefined")?'Saved.':correctAnswer;
$('form.standard').submit(function(event){
event.preventDefault();
var modalWin = $(this).parent();
var values = $('form.standard').serialize() + addCustomData;
$.ajax({
url: "inc/gateway.php",
data: values,
type: "POST",
success: function(data){
**flag = 0;**
if (data == "OK"){
$(modalWin).html(correctAnswer).delay(500).fadeOut(500);
setTimeout(function() {
mw_close();
}, 1000);
}else{
alert(data);
}
}
});
});
}https://stackoverflow.com/questions/11116908
复制相似问题