jQuery AJAX的成功在Firefox中不起作用

时间:2012-10-11 10:20:53

标签: jquery ajax google-chrome firefox

我有这个小小的AJAX电话:

    $('#brick-mixer-form').submit(function(e) { 
        e.preventDefault();

        $("#mix-bricks-submit").addClass("load");
        $("#mix-bricks-submit").attr("value", "Blander sten..");

        var form_data = $("#brick-mixer-form").serialize()

        $.ajax({
           type: "GET",
           url: "build.php",
           data: form_data,
           dataType: 'text',
           async: false,
           success: function(data) {
              $(".active").attr('src', 'build.php?'+form_data+'').load(function() {
              $("#mix-bricks-submit").removeClass("load");
              $("#mix-bricks-submit").attr("value", "Bland igen");
              $("#bricks-selected").attr("value", form_data);
              $("#pdf_saver").css("display", "block");
           });
        }
     });
});

在谷歌浏览器中,这种方法非常完美,但在Firefox中,我只能触发一次。

当我再次按下提交按钮“mix-bricks-submit”时,它将不会再次运行该呼叫。

3 个答案:

答案 0 :(得分:1)

根据.load(),url参数不是可选的,因此

$('#brick-mixer-form').submit(function(e) { 
        e.preventDefault();

        $("#mix-bricks-submit").addClass("load");
        $("#mix-bricks-submit").attr("value", "Blander sten..");

        var form_data = $("#brick-mixer-form").serialize()

        $.ajax({
           type: "GET",
           url: "build.php",
           data: form_data,
           dataType: 'text',
           async: false, //I would avoid forcing synchronous
           success: function(data) {
              //$(".active").attr('src', 'build.php?'+form_data+'').load(function() {
              $("#mix-bricks-submit").removeClass("load");
              $("#mix-bricks-submit").attr("value", "Bland igen");
              $("#bricks-selected").attr("value", form_data);
              $("#pdf_saver").css("display", "block");
           //});
           }
        });
});

$('#brick-mixer-form').submit(function(e) { 
        e.preventDefault();

        $("#mix-bricks-submit").addClass("load");
        $("#mix-bricks-submit").attr("value", "Blander sten..");

        var form_data = $("#brick-mixer-form").serialize()

        $.ajax({
           type: "GET",
           url: "build.php",
           data: form_data,
           dataType: 'text',
           async: false,//I would avoid forcing synchronous
           success: function(data) {
              $(".active").load('build.php',form_data,function() {
                $("#mix-bricks-submit").removeClass("load");
                $("#mix-bricks-submit").attr("value", "Bland igen");
                $("#bricks-selected").attr("value", form_data);
                $("#pdf_saver").css("display", "block");
              });
           }
        });
});

虽然为什么会执行两次ajax语句但我不确定

答案 1 :(得分:0)

试试这个:

设置

$.ajax({
           type: "GET",
           url: "build.php",
           data: form_data,
           dataType: 'text',
           async: false,
           cache: false,
           success: function(data) {
              $(".active").attr('src', 'build.php?'+form_data+'').load(function() {
              $("#mix-bricks-submit").removeClass("load");
              $("#mix-bricks-submit").attr("value", "Bland igen");
              $("#bricks-selected").attr("value", form_data);
              $("#pdf_saver").css("display", "block");
           });

答案 2 :(得分:0)

这是作为原始提问者的编辑添加的,我已将其转换为社区维基答案,因为它应该是答案,而不是编辑。

解决方案:

    $('#brick-mixer-form').submit(function(e) { 

       e.preventDefault();
       var nowis = new Date();

       $("#mix-bricks-submit").addClass("load");
       $("#mix-bricks-submit").attr("value", "Blander sten..");

       var form_data = $("#brick-mixer-form").serialize()

       $.ajax({
          type: "GET",
          url: "build.php",
          data: form_data,
          dataType: 'text',
          success: function(data) {

          $(".active").attr('src', 'build.php?'+form_data+'&tstamp='+ nowis.getMilliseconds() +'').load(function() {
          $("#mix-bricks-submit").removeClass("load");
          $("#mix-bricks-submit").attr("value", "Bland igen");
          $("#bricks-selected").attr("value", form_data);
          $("#pdf_saver").css("display", "block");
        });
     }
   });
});

通过将tstamp参数插入到具有毫秒值的查询中,我将在每次提交表单时强制使用新的图像名称,这似乎会覆盖FF和IE中的缓存问题。