如何在ajaxSend中停止ajax请求?

时间:2010-12-20 23:00:35

标签: jquery

$('#speichern').live('click' , function () {

    var data_save = $('#form_rechn').serialize()+ '&' + 'action=save' + '&' + 'total=' + Number($('#grandTotal').text().replace(/EUR/g, ""));

 $.ajax({ 
    type    : "POST",
    cache   : false,
    url     : 'invoice_new_action.php',
    data    : data_save,

    ajaxSend : $.post("invoice_new_action.php",{"action":"before","rn":   $('#rn').val()},function(huhn){
                var totest = Number(huhn)
                if ( totest == "") {
                    } else {
                $('#rn').val(totest); 
                $.fancybox('nr. existiert. ');
                return false; // Why don't stop here?
                };}),

     error:function (xhr, ajaxOptions, thrownError){
                alert(xhr.status);
                alert(thrownError);
     },
    success : function(data) { 
        $.fancybox(data); 
            }
    });

我可以采用其他方式吗?为什么ajax没有通过return false停止?

1 个答案:

答案 0 :(得分:1)

为什么不停止?因为您定义的函数是$.post的回调函数,当您从post发出响应时将始终调用它。因为默认情况下$.post是异步的,所以您无法发布并等待响应,以确定是否应继续使用原始的ajax调用。

你可以使用同步ajax帖子(eww!bad!)或者你可以解释你想要完成的最终结果。在社区的帮助下,也许您可​​以重新考虑您的实现,而不需要一个ajax帖子来决定是否需要发布另一个。一般来说,我认为你想要的是这个:

$('#speichern').live('click' , function () {
  // Immediately post to test if you should keep going
  $.post('...',function(huhn){
    // ...
    if (totest){
      // Oh, OK, now we can call the real ajax.
      $.post(...,data_save,function(data){
        $.fancybox(data);
      });
    }
  }
});