在JQuery中发布表单并填充DIV – 在IE中打破
我正在尝试创建一个通过jQuery发布数据的表单,并将返回值填充到相同的DIV中。 这样,页面不会在后期操作上刷新。
JSfunction:
function post_form(url) { $.post(url, {'test':'test'}, function(data) { $("#add_value_form").empty().append(data); }, "text"); }
这在FF3中完美运行,但它只能在IE6 / 7中随机工作。
服务器确认发布请求是来自IE,但它只会偶尔获得发布数据。
好奇,我决定提醒数据变量:
$.post(url, {'test':'test'}, function(data) {alert(data);}, "text");
当然,FF3每次都会打印出返回HTML,而IE6 / 7主要是打印空白,偶尔会返回HTML。 我无法在这个问题上找到任何东西,所以我做错了什么?
已解决:我将此跟踪到我在请求处理代码中的HTTP重定向。 因此处理POST请求的函数会抛出重定向,IE不喜欢它。 我当时总有精神上的便秘,我真的不需要重定向。
当然,奇怪的部分是它在FF中工作,IE有时也可以工作,重定向到位。
我想说在这种情况下你根本不需要使用表单标签。
编辑 Paolo Bergantino说我也会避免使用内联javascript。 所以改为使用:
使用Javascript
$(document).ready(function() { $('.formSubmitButton').click(function() { $.post('/add_value', {'test':'test'}, function(data) { $("#add_value_form").empty().append($(data)); }, "text"); }); });
更新因为这仍然会导致问题,我会使用$.ajax
方法执行一些测试。 此外,我不相信POST调用会被缓存,但以防万一尝试将缓存设置为false。 为确保您没有序列化问题,另一项测试是传输已编码的数据。 如果您仍有问题,可以尝试将dataType设置为文本
$.ajax({ url: '/add_value', type: 'POST', cache: false, data: 'test=testValue', dataType: 'text', complete: function(xhr, textStatus) { alert('completed'); }, success: function(data) { alert(data); }, error: function(xhr, textStatus, errorThrown) { alert('woops'); } });