卡斯珀斯';sendAJAX异步标志设置为true失败
我设置了一个CasperJS脚本来调用我的web服务(在localhost:9000上运行) 包含需要填写的参数的webservice。比方说一个amount参数,我的webservice从它的参数中保存amount数据。所以我写了我的CasperJS脚本如下:卡斯珀斯';sendAJAX异步标志设置为true失败,ajax,casperjs,Ajax,Casperjs,我设置了一个CasperJS脚本来调用我的web服务(在localhost:9000上运行) 包含需要填写的参数的webservice。比方说一个amount参数,我的webservice从它的参数中保存amount数据。所以我写了我的CasperJS脚本如下: casper.then(function(){ val = this.evaluate(function(){ //do step #1 ajax request var country_amo
casper.then(function(){
val = this.evaluate(function(){
//do step #1 ajax request
var country_amount = 9;
var params = "amount="+country_amount;
var data = "amount="+country_amount;
var wsurl = "http://localhost:9000/TempCountryAmountREST/setCountryAmount?amount="+country_amount;
//window.__utils__.echo("Country Amount :"+country_amount);
return JSON.parse(__utils__.sendAJAX(wsurl, "POST" , null, false, { contentType: "application/json" }));
});
});
正如您所看到的,在\uuuutils\uuuuu.sendAJAX
的第四个参数中,我将其设置为false,这意味着异步=false。好吧,async=false一切顺利。该val变量已成功返回json数据
但是当我变假为真的时候,我想到了一件奇怪的事情。有时它成功地保存了数据(使用我的webservice),但val没有返回正确的值(它为null,但应该返回json数据)。但是当我在phpmyadmin上看到时,保存数据仍然是成功的。但有时(几乎总是发生),它无法保存数量数据,仍然返回null(不是json数据)
因此,在CasperJS sendAJAX中使用异步请求是否存在问题?这是异步执行时的预期行为。例如,通过使用
setTimeout
函数,以下代码是异步的:
function sendAsync(){
var returnVal;
setTimeout(function(){
returnVal = sendSync();
}, 100);
return returnVal;
}
由于setTimeout
是异步的,因此sendSync
在sendSync
完成后被调用甚至完成。您不能基于异步调用返回某些内容。有关更多信息,请参阅
\uuuutils\uuuu.sendAJAX()
不提供可用于异步获取返回数据的回调。由于希望返回数据,因此必须将异步参数设置为false
异步参数设置为true的\uuuUtils\uUuUuUtils.sendAJAX()
只能用于对返回的数据不感兴趣的所谓的fire and forget请求。通常您对返回的数据感兴趣
它有时无法正确发送和保存数据的原因可能是因为这是一个异步过程,并且您的CasperJS脚本在请求完成之前退出,从而终止您的请求。通过将async指定为true,您实际上与控制流有了一个微小的中断