我有一个拥有大量 AJAX 的骨干应用程序。(每个页面加载会导致 5-6 次 ajax 调用)因为我在这些视图中有很多视图和内部视图,
如果我运行 Phantom.js,我能得到最终的 html 结果吗?
最终结果是用户在我的所有 ajax 调用运行后看到的。
我有一个拥有大量 AJAX 的骨干应用程序。(每个页面加载会导致 5-6 次 ajax 调用)因为我在这些视图中有很多视图和内部视图,
如果我运行 Phantom.js,我能得到最终的 html 结果吗?
最终结果是用户在我的所有 ajax 调用运行后看到的。
PhamtonJs 是一个带有 JavaScript API 的无头 WebKit。在爬取页面时,PhatomJs 会下载图片、js、css 等所有依赖请求……它还会执行 JS 和 ajax 调用。然而,当页面完成加载时调用 onLoaded 回调,而不是在没有挂起请求时调用。所以,你必须为此使用一个技巧。
有两种方法可以解决这个问题:
您可以将 $.active 与 waitFor.js 脚本一起使用,该脚本返回与服务器的活动连接数,我们需要等待它为 0 才能完成所有请求。
更多信息:jQuery.active 函数
如果您可以访问网站的 javascript 代码,除此之外waitFor()
,我认为您可以使您的 ajax 请求同步。它有时更简单,更准确。