casperjs:如何触发jquery$.ajax调用

casperjs:如何触发jquery$.ajax调用,jquery,phantomjs,casperjs,Jquery,Phantomjs,Casperjs,我有一个正在工作的casperjs脚本,但它只在大约50%的时间内成功地执行了$.ajax调用 我知道它在工作,因为当它工作时,我可以看到api日志中显示的新数据,并且可以看到数据库中更新的字段。在失败的尝试中,我在api上看不到任何活动,因此似乎它甚至没有启动ajax调用。是什么导致这个ajax调用只在某些时候起作用?casper日志行始终返回null,即使它确实更新了my db字段。下面是代码片段。我使用GET,因为它是跨域的 casper.then(function() { //

我有一个正在工作的casperjs脚本,但它只在大约50%的时间内成功地执行了$.ajax调用

我知道它在工作,因为当它工作时,我可以看到api日志中显示的新数据,并且可以看到数据库中更新的字段。在失败的尝试中,我在api上看不到任何活动,因此似乎它甚至没有启动ajax调用。是什么导致这个ajax调用只在某些时候起作用?casper日志行始终返回null,即使它确实更新了my db字段。下面是代码片段。我使用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的新手,所以如果能指出代码中的其他错误,我将不胜感激。谢谢。

在调用evaluate之前,jQuery可能不会被注入到页面中

要测试是否是这种情况,您可以将以下内容放在脚本的顶部,它会让您知道远程页面上是否抛出了任何错误

casper.onpage.error,functionmsg,跟踪{ this.echoorror:+msg,错误; }; 如果是这种情况,您可以将注入移动到另一个块中,然后再移动块

卡斯珀函数{ this.page.injectJs'C:/jquery.min.js'; }; 卡斯珀函数{ response=this.evaluatefunction{ . . . }; }; 或者您可以将注入移动到create中,但随后您将把jQuery注入到每个页面加载中,而不仅仅是一个页面加载中

var casper=require'casper'。创建{ 客户端脚本:[C:/jquery.min.js] };