2010-12-20 5 views
1
$('#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); 
      } 
    }); 

Kann ich es tun einen anderen Weg? Warum wird der Ajax nicht über return false gestoppt?Wie kann ich eine Ajax-Anfrage in AjaxSend stoppen?

+0

Welche Anforderung versuchen Sie zu stornieren? Der '$ .ajax' Aufruf oder der' $ .post' Aufruf? Warum verwenden Sie eine "innere" Ajax-Anfrage, anstatt nur die Daten zu kombinieren? –

Antwort

1

Warum es nicht stoppen? Da die Funktion, die Sie definieren, die Rückruffunktion für $.post ist, die immer aufgerufen wird, wenn Sie eine Antwort von Post erhalten. Da $.post standardmäßig asynchron ist, können Sie nicht veröffentlichen und auf eine Antwort warten, um herauszufinden, ob Sie halten sollten mit Ihrem ursprünglichen Ajax-Aufruf geht.

Sie entweder synchrone Ajax-Post verwenden könnten (eww! Schlecht!) Oder man könnte das Ende erklären führen Sie versuchen zu erreichen. Mit der Hilfe der Community können Sie Ihre Implementierung vielleicht zu etwas überdenken, das keinen Ajax-Post benötigt, um zu entscheiden, ob Sie einen anderen veröffentlichen müssen. Im Allgemeinen Ich denke, was Sie wollen dies:

$('#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); 
     }); 
    } 
    } 
}); 
Verwandte Themen