I have a page that sends an XHR request when a form is submitted and I would like to get Chrome to break when it receives a response. It seems like the best way to accomplish this would be if Chrome has a javascript function that I can call that breaks execution but I've been unable to find anything like that so far. Is there another solution?
Edit:
I don't actually have a callback defined for the request so I can't set a breakpoint that way. The request is being sent with this line of jquery code:
$.post(this.action, $(this).serialize(), null, "script");
where this
is a form element. The null
argument is where you would usually define a callback but with the "script"
argument, raw javascript is returned by the server and then directly executed, so it seems the only way to break and step through the code is with the debugger;
statement. This works, but when stepping through the code you can't actually see which line you are on so its a little awkward. I suspect that this is a limitation of Chrome's debugging tools.
In the Network panel of devtools, right-click and select Copy as cURL. Paste / Edit the request, and then send it from a terminal, assuming you have the curl command.
An XHR (XMLHttpRequest) breakpoint breaks code execution when an XHR request is dispatched so that you can examine the current state of the program. You can break on all requests or on those that include a specific URL.
XMLHttpRequest (XHR) is an API in the form of an object whose methods transfer data between a web browser and a web server. The object is provided by the browser's JavaScript environment.
drop down the chrome console (ctrl+shift+j) and type any of these:
Just rewrite the jquery ajax:
var prevajax = jQuery.ajax; jQuery.ajax = function () { debugger; return prevajax.apply(jQuery, arguments); };
or if you are not using jQuery, rewrite the xhr class:
var prevxhr = XMLHttpRequest; XMLHttpRequest = function (){debugger; prevxhr.apply(this, arguments);};
After it breaks, just press shift+f11 until you find the method which initiates the ajax request.
You can just set a breakpoint in the success callback and step through the debugger. To set a breakpoint:
Alternatively, you can use the debugger
statement to automatically invoke the debugger. So with this your success callback may look like:
success: function(data, textStatus, request) { debugger; // pause execution and opens debugger at this point ... }
Also checkout this nice article for debugging JavaScript.
However, the first approach is better as it doesn't require you to modify your code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With