2012-10-05 36 views
0

我在父html表单(不是我的代码!)中有一个ajax表单。用例场景是提示用户输入配置文件信息,打开弹出窗口为该帐户添加多个联系人,并继续填写配置文件的其余部分。

联系人框允许用户添加新联系人,编辑现有联系人或删除联系人。

问题是当用户提交添加,编辑或删除的ajax表单时,整个页面会刷新,并且父表单中任何未保存的$ _POST数据都会丢失。

如果我在页面上或Ctrl + $或Cmd + R中输入,$ _POST数据不会丢失。这是几个我看过试图找出这个东西出来的文章:

我是一个PHP开发人员,一个完整的AJAX newb,所以请原谅我缺乏这方面的知识。我试图用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

目标是添加多个联系人并将数据发送回父表单,而不会丢失尚未保存的父表单中的任何数据。 – deewilcox

回答

0

删除local.reload()以停止刷新页面。您可以删除整个complete:function(){},因为它仅在ajax调用成功返回后执行某些操作很有用。并考虑添加另一个按钮,例如“完成更改”以关闭对话框。 例如:

(...) 
buttons: { 
    "Done": function() { 
     $(this).dialog('close'); 
    }, 
(...) 
+0

感谢您的帮助!我最终选择了jQuery模式对话框,因为我需要在不刷新页面的情况下显示新数据,也不需要从另一个文件中提取新数据。虽然这确实回答了这个问题。 – deewilcox