0

我有这个小 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");
           });
        }
     });
});

在 Google Chrome 中这很完美,但在 Firefox 中我只能触发一次。

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

4

3 回答 3

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 语句

于 2012-10-11T11:17:06.987 回答
1

尝试这个:

环境

$.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");
           });
于 2012-10-11T10:25:31.927 回答
0

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

解决方案:

    $('#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 中的缓存问题。

于 2015-06-23T18:39:11.857 回答