[英]CasperJS sends empty POST data to endpoint
我正在使用CasperJS抓取网站,构建JSON对象以组织抓取的信息,然后将此类JSON对象发布到将信息ETL导入数据库的服务(在PHP中)。
这就是问题所在,每当我尝试发送JSON对象时,该对象为空,这就是我用来发送信息的代码。
casper.then(function(){
var productDetails = {};
this.each(products,function(self, product){
self.thenOpen(product, function(a){
productDetails = this.evaluate(getProductDetails);
});
self.thenOpen('http://localhost.endpoint.lan/saveScrapingData.php', {
method:'post',
data: {
name:'Alan',
info: productDetails
},
headers: {
'Content-type': 'application/x-www-form-urlencoded'
}
});
});
});
问题是productDetails被发送为空,我不知道为什么,因为在这一点上如果我console.log
变量:
self.thenOpen(product, function(a){
productDetails = this.evaluate(getProductDetails);
});
变量不为空,这很可能是比赛条件。 该变量在包含任何数据之前就已发送,但是如果我确定该变量包含数据之后再发送数据,我不明白为什么会这样。
是的,在调用thenOpen
, productDetails
变量仍未定义。 您可以将thenOpen
调用拆分为thenOpen
then
open
以便在实际调用open
时对其进行定义。
self.then(function(){
this.open('http://localhost.endpoint.lan/saveScrapingData.php', {
method:'post',
data: {
name:'Alan',
info: productDetails
},
headers: {
'Content-type': 'application/x-www-form-urlencoded'
}
});
});
这是因为卡斯珀步骤( then*
或wait*
)的异步方式。 它们已安排但稍后执行。 问题在于,由于尚未执行上一步,因此使用settings对象调用thenOpen
productDetails
的值固定为undefined
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.