2010-12-11 92 views
1
$("#Save").click(function() { 
    var lastForm = $(".frm_product_group").size() - 1; 
    $(".frm_product_group").each(function (index) { 
     $.post("save_new_product_group.php", $(this).serialize(), function (data) { 
      if (data == false) { 
       alert("Error: Try again"); 
      } 
     }); 
     if (index == lastForm) { 
      window.location.href = "product_group.php"; 
     } 
    }); 
}); 

在上面的代码中,窗口重定向到没有jquery.post(...)的product_group.php。如果我在window.location之前使用alert(...),则jquery.post()更新可以正常工作。我想这是jquery响应时间的问题。我无法整理出来。调用jquery,每个工作不正常

请帮忙。

回答

1

你需要把位置变化回调的门柱内侧。在帖子有机会完成之前,它正在改变位置(重定向)。

$("#Save").click(function() { 
    var numForms = $(".frm_product_group").length; 
    $(".frm_product_group").each(function() { 
     $.post("save_new_product_group.php", $(this).serialize(), function (data) { 
      if (data == false) { 
       alert("Error: Try again"); 
       return false; // Prevent more posts from being sent after error 
      } else { 
       numForms--; 
       if (numForms === 0) { 
        window.location.href = "product_group.php"; 
       } 
      } 
     }); 
    }); 
}); 
+0

@ box9:抱歉,没有处理您的建议。 – Iqbal 2010-12-11 12:51:19

+0

@Iqbal - 发生了什么?窗口是否重定向到'product_group.php'?是否有任何帖子通过?我怀疑只有一个职位正在通过。 – 2010-12-11 12:59:07

+0

@Iqbal - 更新了处理多个表单的答案,因为服务器响应可以以任何顺序返回并提前触发window.location.href更改。 – 2010-12-11 13:03:29

0

你可能会错过event.preventDefault调用,这样保存按钮不会发布形式

$("#Save").click(function (e) { 
    e.preventDefault(); 
    var lastForm = $(".frm_product_group").size() - 1; 
+0

没有任何遗漏,保存按钮不会发布表单。全部由jquery控制。问题可能在阿贾克斯响应...但我不知道。 – Iqbal 2010-12-11 12:38:44

+0

你可以发布标记吗? – Jaime 2010-12-11 12:40:52

+0

e.preventDefault()没有解决问题。 – Iqbal 2010-12-11 12:42:56

0

我在另一天有同样的问题,是的这是jquery工作太快的问题。我的解决方案是通过setTimeOut()将呼叫延迟到重定向。 您的代码将如下所示:

$("#Save").click(function() { 
     var lastForm = $(".frm_product_group").size() - 1; 
     $(".frm_product_group").each(function (index) { 
      $.post("save_new_product_group.php", $(this).serialize(), function (data) { 
       if (data == false) { 
        alert("Error: Try again"); 
       } 
      }); 
      if (index == lastForm) { 
       setTimeout("foo",1000); 

      } 
     }); 
    }); 

    function foo() 
    { 
     window.location.href = "product_group.php"; 
    } 
+0

我同意box9。延迟可能是解决方案,但不是好的解决方案感谢user537417 – Iqbal 2010-12-11 13:08:02