繁体   English   中英

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

[英]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);
});

变量不为空,这很可能是比赛条件。 该变量在包含任何数据之前就已发送,但是如果我确定该变量包含数据之后再发送数据,我不明白为什么会这样。

是的,在调用thenOpenproductDetails变量仍未定义。 您可以将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM