Javascript CasperJS将空POST数据发送到端点
我正在使用CasperJS刮取一个站点,构建一个JSON对象来组织刮取的信息,然后将这样的JSON对象发布到一个服务(在PHP中),该服务将信息ETL到数据库中 问题是,每当我尝试发送JSON对象时,对象都是空的,这是我用来发送信息的代码Javascript CasperJS将空POST数据发送到端点,javascript,casperjs,Javascript,Casperjs,我正在使用CasperJS刮取一个站点,构建一个JSON对象来组织刮取的信息,然后将这样的JSON对象发布到一个服务(在PHP中),该服务将信息ETL到数据库中 问题是,每当我尝试发送JSON对象时,对象都是空的,这是我用来发送信息的代码 casper.then(function(){ var productDetails = {}; this.each(products,function(self, product){ self.thenOpen(product
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);
});
变量不是空的,很可能这是一种赛车状态。变量在包含任何数据之前发送,但我不明白为什么会发生这种情况,如果我在确定变量包含数据之后发送数据 是,在调用
打开时,productDetails
变量仍然未定义。您可以将然后open
调用拆分为然后
和打开
,以便在实际调用打开
时对其进行定义
self.then(函数(){
这个,打开http://localhost.endpoint.lan/saveScrapingData.php', {
方法:'post',
数据:{
姓名:"艾伦",,
信息:产品详细信息
},
标题:{
“内容类型”:“应用程序/x-www-form-urlencoded”
}
});
});
这是因为casper步骤的异步方式(then*
或wait*
)。它们是计划好的,但会在以后执行。问题是,通过使用设置对象调用thenOpen
,将productDetails
的值固定为undefined
,因为上一步尚未执行。是,在调用thenOpen
时,productDetails
变量仍然未定义。您可以将然后open
调用拆分为然后
和打开
,以便在实际调用打开
时对其进行定义
self.then(函数(){
这个,打开http://localhost.endpoint.lan/saveScrapingData.php', {
方法:'post',
数据:{
姓名:"艾伦",,
信息:产品详细信息
},
标题:{
“内容类型”:“应用程序/x-www-form-urlencoded”
}
});
});
这是因为casper步骤的异步方式(then*
或wait*
)。它们是计划好的,但会在以后执行。问题是,通过使用设置对象调用打开
,将产品详细信息
的值固定为未定义
,因为上一步尚未执行