Für das Debugging per XDebug nutze ich Browser-Helper wie den „Xdebug Starter” für Firefox. Der Starter sendet, wenn „Debugging” ausgewählt wurde, automatisch einen Cookie mit einem XDEBUG_SESSION-Eintrag, der Xdebug anweist, eine Debug-Session zu starten und sich mit dem konfigurierten Debug-Host und Port zu verbinden. Das klappt aber leider nicht ohne weiteres bei AJAX-Calls.
Wird ein AJAX-Request gestartet, stoppt der Debugger nicht an den gesetzten Breakpoints. Das liegt daran, dass der per Javascript initiierte AJAX-Request keinen XDEBUG_SESSION-Parameter oder -Cookie sendet.
Die Abhilfe ist einfach: hänge den XDEBUG_SESSION-Parameter einfach an die URL des AJAX-Requests an:
jQuery.ajax({
url: 'http://localhost:3000/wp-admin/admin-ajax.php?XDEBUG_SESSION=netbeans-xdebug',
type: 'POST',
data: {
action: 'myAjaxRequestAction',
...
Das funktioniert übrigens auch bei POST-Requests; Xdebug schert sich nicht um den Request-Typ, sondern sieht nur auf die URL-Parameter bzw. Cookies.