I have a backbone app that has a ton of AJAX. (each page load results in 5-6 ajax calls) because I have many views and internal views within those views,
if I run Phantom.js, can I get the final html result?
Final result is what the user sees after all my ajax calls run.
PhamtonJs is a headless WebKit with JavaScript API. When crawling a page, PhatomJs will download all dependants requests such as images, js, css... It will also executes JS and ajax calls. However the onLoaded callback is invoked when the page finishes the loading, not when there are no pending requests. So, you have to use a trick for this.
There are two way to solve the problem :
Phantom.js is able to run the javascript in your page, so this should work. There is an article describing how to give crawlers nice versions of javascript sites using Phantom.js.
Be sure to give Phantom.js enough time to complete the ajax calls, as this thread describes.
You can use $.active along with waitFor.js script which returns the no of active connection to a server and we need to wait for it to be 0 for all requests to be complete.
More info: jQuery.active function
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