Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CasperJS将空POST数据发送到端点_Javascript_Casperjs - Fatal编程技术网

Javascript CasperJS将空POST数据发送到端点

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

我正在使用CasperJS刮取一个站点,构建一个JSON对象来组织刮取的信息,然后将这样的JSON对象发布到一个服务(在PHP中),该服务将信息ETL到数据库中

问题是,每当我尝试发送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);
});

变量不是空的,很可能这是一种赛车状态。变量在包含任何数据之前发送,但我不明白为什么会发生这种情况,如果我在确定变量包含数据之后发送数据

是,在调用
打开时,
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*
)。它们是计划好的,但会在以后执行。问题是,通过使用设置对象调用
打开
,将
产品详细信息
的值固定为
未定义
,因为上一步尚未执行