casperjs无法识别在then语句之间存储的全局变量

时间:2018-06-23 16:57:17

标签: javascript phantomjs casperjs

所以我调用第一个url ...它返回一个JSON对象,我将该JSON对象存储在一个名为array_map($array, function ($item) { return $item->method();}); ...的全局变量中,然后使用global_input <打开一个链接/ p>

global_input.token

这是日志

  var global_input = {'token' : 'xxx'} ;


    casper.start('http://localhost/client/charg/que' , function (content) {


     })
    .then(function() {
       global_input  = JSON.parse(this.getPageContent());
       casper.log( ' ==== token === > ' + global_input.token    , 'debug');

    })
    .thenOpen('http://localhost/client/charg/go/' + global_input.token , function() {

    })

    .run(function(){
        this.echo("DONE1");
        this.exit();
    });

如您所见,即使日志显示page init ..... [info] [phantom] Step anonymous 2/5 http://localhost/client/charg/que (HTTP 200) [info] [phantom] Step anonymous 2/5: done in 725ms. [info] [phantom] Step anonymous 3/5 http://localhost/client/charg/que (HTTP 200) [debug] [phantom] ==== token === > e608e91335fd622f430692d40e7ddf0f4b63428d [info] [phantom] Step anonymous 3/5: done in 750ms. [debug] [phantom] opening url: http://localhost/client/charg/go/xxx, HTTP GET 被设置为新值

token

在下一步中,我仍然获得令牌的默认值==== token === > e608e91335fd622f430692d40e7ddf0f4b63428d

xxx
我想念什么吗?

1 个答案:

答案 0 :(得分:2)

您的global_input已在thenOpen方法中注册为其初始值。

喜欢

  casper.start(static url , callback method)
        .then(callback method)
        .thenOpen(static url (here, initial global object is used) , callback method)
        .run(callback method);

因此,如果您更改static_url中的任何内容,casperjs将不会知道,因为它已经在casperjs的执行堆栈中注册了这些url。

您需要这样做

var global_input = {'token' : 'xxx'} ;

// this method will be called again when evaluating the url
function getGlobalToken() {
    return global_input.token;
}

现在调用这样的get方法

thenOpen('http://localhost/client/charg/go/' + getGlobalToken() , function() {

    })