1

私は動作しているcasperjsスクリプトを持っていますが、$.ajax呼び出しを正常に実行できるのは約50%の確率です。

動作しているときに新しいデータが API ログに表示され、データベースで更新されたフィールドが表示されるので、動作していることがわかります。失敗した試行では、API でアクティビティが表示されないため、ajax 呼び出しを開始していないようです。この ajax 呼び出しが時々しか機能しない原因は何ですか? casper ログ行は、db フィールドを更新しても常に 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 を初めて使用するので、コード内の他のエラーを指摘していただければ幸いです。ありがとう。

4

1 に答える 1

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()、そうすると、1 つのページだけでなく、すべてのページの読み込みに jQuery を注入することになります。

var casper = require('casper').create({
    clientScripts: ["C:/jquery.min.js"]
});
于 2013-10-26T00:28:33.127 に答える