我正在尝试通过AJAX发送表单,以便数据得到验证并在数据库上进行更新。它在Chrome和Firefox上运行得很好,但在IE上它根本不起作用!它不会引起任何错误。
我的PHP代码摘要如下所示(我使用Codeigniter作为我的框架):
function update()
{
if ($this->uri->segment(3))
{
if ("validation ok")
{
"update the database"
$this->session->set_flashdata('data_updated', 'The row has been updated successfully');
redirect(current_url()); // so I can see the flashdata on my page.
}
$data = array(...);
$this->load->view('template', $data);
}
}
就是这样。我一直试图摆脱“重定向”部分,认为它可能与我的问题有关。但即使我评论该行,也不会插入数据。
现在,我的AJAX代码如下所示:
jQuery.ajaxSetup({ cache: false });
jQuery(document).on("submit", ".formmother", function(e) {
e.preventDefault();
jQuery(".menumodal").html('');
jQuery(".menumodal").html('<div class="modal-header"> <a class="close" data-dismiss="modal" aria-hidden="true">×</a> <h3 id="myModalLabel">Enviando informações...</h3> </div> <div class="modal-body"><div class="loader"></div></div>');
jQuery.ajax({
type: "POST",
url: jQuery(this).attr("action"),
data: jQuery(this).serialize(),
cache: false,
dataType:"html",
success: function(html){
jQuery(".menumodal").html(html);
},
error: function(e){
alert(e);
}
});
// jQuery.post(jQuery(this).attr("action"), jQuery(this).serialize(), function(html) {
// jQuery(".menumodal").html(html);
// });
// prevent normal submit
});
我重组了整个ajax调用,看看是否能从中获取任何东西。但它只是行不通。
会发生什么:
当我点击编辑任何一行时,它会加载(通过ajax)一个带有模态(bootstrap模态)内部数据的表单。那部分工作正常。然后,当我在其他浏览器中单击“保存”时,它会使用相同的页面(已重定向)加载相同的模式,并显示(flashdata)成功消息。数据会在数据库中更新。
但是在IE上发生的事情是,当我点击“保存”按钮时,它再次加载相同的东西,没有任何改变!该行不会在数据库上获得任何错误。
我注意到一个有趣的事情是,如果我从AJAX调用中获取“数据”部分,那么它将返回我的验证错误。但是如果我将一个obrigatory字段留空,则验证不会返回任何错误。
ajax被触发并在IE上获得“成功”,但它不返回新页面,并且行未更新(它在编辑数据之前返回相同的页面)。如果我禁用AJAX调用,它一切正常。所以这与AJAX调用本身有关。