2016-05-16 10 views
0

Ich habe folgende Jquery Ajax-Aufruf:jquery benutzerdefiniertes Ereignis in Ajax-Erfolg Callback funktioniert nicht ohne SetTimeout

$.ajax({ 
    type: "POST", 
    url: url, 
    data: data, 
    success: function (data, textStatus, jqXHR) {       
    // Without setTimeout, the triggerHandler doesn't work 
    setTimeout(function (e) {       
     $(this).triggerHandler($.Event("CustomEvent")); 
    }); 
    } 
}); 

Und in einem anderen Ort:

$(this).on('CustomEvent', function (evt) { 
    alert("CustomEvent"); 
}); 

Der obige Code zeigt eine Warnung. Wenn ich jedoch den triggerHandler Aufruf in setTimeout nicht einschließen, wird das .on nie aufgerufen und eine Warnung wird nicht angezeigt. Irgendwelche Ideen warum das SetTimeout dafür notwendig zu sein scheint?

+0

Den vollständigen js-Code zu veröffentlichen wird hilfreich sein ... oder ein minimales funktionierendes Beispiel –

+3

Ich nehme an, es liegt daran, dass der Umfang von 'this' nicht ist, was auch immer Sie innerhalb des' success'-Handlers von '$ erwarten .ajax' –

+0

versuchen Sie es in die "vollständige" Funktion Ihres Ajax. –

Antwort

0

Der Grund ist "das" ist nicht immer "das".

Wenn die setTimeout Methode funktioniert, Ihre Veranstaltung auf $(window), so sollte diese Arbeit:

success: function (data, textStatus, jqXHR) {       
    $(window).triggerHandler("CustomEvent"); 
} 

Es gibt keine Notwendigkeit, ein jQuery-Ereignis-Objekt von der Art und Weise zu erstellen.

+0

dude window funktioniert nicht – jeevanswamy21

Verwandte Themen