我在父html表单中有一个ajax表单(不是我的代码!)。用例场景是提示用户输入配置文件信息,打开弹出窗口以向帐户添加多个联系人,并继续填写配置文件的其余部分。
联系人框允许用户添加新联系人,编辑现有联系人或删除联系人。
问题是,当用户提交用于添加,编辑或删除的ajax表单时,整个页面将刷新,并且父表单中任何未保存的$ _POST数据将丢失。
如果我在页面上按Enter键,或者按Ctrl + $或Cmd + R,则$ _POST数据不会丢失。这些是我读过的一些试图解决这个问题的文章:
我是一名PHP开发人员和一个完整的AJAX新手,所以原谅我在这里缺乏知识。我尝试使用return false;
和location.reload(true)
模仿Ctrl + R效果,但两个都没有效果。我错过了什么?
这是弹出框的代码:
$("#contact-dialog").dialog({
autoOpen: false,
width: 600,
modal: true,
buttons: {
"Ok": function() {
var bValid = true;
allFields.removeClass( "ui-state-error" );
bValid = bValid && checkLength( contact_first_name, "first name", 2, 64 );
bValid = bValid && checkLength( contact_last_name, "last name", 2, 64 );
bValid = bValid && checkLength( title, "title", 1, 64 );
bValid = bValid && checkLength( phone, "phone", 6, 30 );
bValid = bValid && checkLength( email_address, "email_address", 5, 128 );
if ( bValid ) {
if (contact_count % 2) {
$( "#contacts" ).append();
} else {
$( "#contacts" ).append();
}
contact_count++;
$.ajax({
type: "POST",
url: "facility-categories-ajax.php",
data: {
type: 'add-to-contacts',
input: $('#contact-dialog-link').val(),
cid: $('#contact-dialog-id').val(),
first_name: contact_first_name.val(),
last_name: contact_last_name.val(),
title: title.val(),
phone: phone.val(),
email_address: email_address.val(),
twitter: twitter.val(),
facebook: facebook.val(),
linkedin: linkedin.val()
},
complete: function(data) {
location.reload();
return false;
}
});
$(this).dialog("close");
}
},
Cancel: function() {
contact_update.val('-1');
$(this).dialog("close");
}
},
close: function() {
allFields.val("").removeClass("ui-state-error");
tips.text("");
if (contact_update.val() > -1) {
delete_contact(contact_update.val());
}
}
});
感谢您的帮助!
答案 0 :(得分:0)
删除local.reload()以停止刷新页面。您可以删除整个complete:function(){},因为它仅对在成功返回ajax调用后执行操作有用。并考虑添加另一个按钮,例如“完成更改”将关闭对话框。 e.g:
(...)
buttons: {
"Done": function() {
$(this).dialog('close');
},
(...)