我有一个工作的casperjs脚本,但它只在50%的时间内成功执行$ .ajax调用。
我知道它正在运行,因为我可以看到新数据显示在我的api日志中,当它确实有效时,我可以在数据库中看到该字段已更新。在失败的尝试中,我看到我的api上没有任何活动,所以它似乎甚至没有触发ajax调用。什么会导致这个ajax调用只在某些时候工作?即使更新了我的db字段,casper日志行也始终返回null。这是代码片段。我正在使用GET,因为它是跨域的。
casper.then(function() {
// Needs local copy of jquery right?
this.page.injectJs('C:/jquery.min.js');
response = this.evaluate(function() {
var params = { "stuffIWantToSave" : "1000" };
var foo = $.ajax({
type: "GET",
data: params,
url: 'http://api.mysite.com/update',
success: function (data) {
return data;
},
error: function (xhr,status,error){
return error;
}
}); // end $.ajax call
}); // end this.evaluate
casper.log('Ajax response:', 'info');
casper.log(JSON.stringify(foo), 'info');
this.die('End');
});// end casper.then(function()
我是casperjs的新手,所以我非常感谢我在代码中指出任何其他错误。感谢。
答案 0 :(得分:0)
在evaluate()
被调用之前,jQuery有可能不会被注入页面。
要测试是否是这种情况,您可以将以下内容放在脚本的顶部,它会告诉您远程页面上是否有任何错误。
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg, "ERROR");
});
如果是这种情况,您可以将注入移动到另一个then()
块
casper.then(function() {
this.page.injectJs('C:/jquery.min.js');
});
casper.then(function() {
response = this.evaluate(function() {
. . .
});
});
或者你可以将注入移动到create()
,但是你会在每个页面加载中注入jQuery而不是只注入一个。
var casper = require('casper').create({
clientScripts: ["C:/jquery.min.js"]
});