2013-10-26 53 views
1

我有一個可用的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

在調用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"] 
});