IE8中的Jquery ajax()调用失败

时间:2010-09-25 11:23:06

标签: javascript jquery ajax internet-explorer

我有以下代码,用于从类ajax的表单中使用ajax提交数据。这在Firefox,Safari和Chrome中完美运行,但在IE中失败。

ajax: function() {
      $('form.ajax').live('submit', function() {
        var form_ajax = $(this);

        $.ajax({
          url: form_ajax.attr('action'),
          data: form_ajax.serialize(),
          type: form_ajax.attr('method'),
          dataType: 'script',
          beforeSend: function(xhr) {

            $('#ajax-bid-new .ajax-form-error, #ajax-bid-new .ajax-form-success').remove();
            form_ajax.slideUp();

          }
        });

        return false;
      });

请帮忙 - 过去2天我被困在这里。我从服务器返回一个Javascript文件,在浏览器中进行评估。这在Firefox,Chrome和Safari中按预期工作,但 IE将其作为文件接收并打开文件下载对话框

我可以在IE中做些什么来完成这项工作?我尝试在我的application.js文件中删除以下代码(我正在做一个rails项目顺便说一句)

// public/javascripts/application.js
jQuery.ajaxSetup({ 
  'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})

即使在编写了上面的ajaxSetup块后,我也从IE中获得了相同的行为。

3 个答案:

答案 0 :(得分:0)

在IE中看起来像live doesn't work with submit。您是否尝试过使用普通提交:

$('form.ajax').submit(function() {

答案 1 :(得分:0)

要在IE中捕获实时表单提交事件,而不是:

$("form").live("submit", function() { ... });

var submitHandler = function() { ... };
$("body").children().each(function() {
      $("form", this).live("submit", submitHandler);
})

需要注意的一点

  • IE非常积极地缓存AJAX请求(无论如何都比Firefox更强)。如果这不适合您的网站,则需要在响应中适当设置Cache-Control标头。

  • 更改您的内容类型,上次我通过更改application / json中的内容类型修复了类似的问题; charset = utf8只是简单的应用程序/ json

  • jQueries' bind and live behaviours along with the liveQuery plugin

答案 2 :(得分:0)

LiveQuery插件解决了问题http://github.com/brandonaaron/livequery