Casperjs не распознает глобальную переменную, хранящуюся между операторами

поэтому я вызываю первый url... он возвращает объект JSON, я храню объект JSON в глобальной переменной global_input.... и затем открываю ссылку, используя 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 === > ****************************************
[info] [phantom] Step anonymous 3/5: done in 750ms.
[debug] [phantom] opening url: http://localhost/client/charg/go/xxx, HTTP GET

как вы можете видеть, хотя журнал показывает, что token установлен на новое значение

==== token === > ****************************************

в следующем шаге я все еще получаю значение по умолчанию для токена, которое было xxx

[debug] [phantom] opening url: http://localhost/client/charg/go/xxx, HTTP GET

я что-то упускаю?

1 ответ

Ваш 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 не будет знать, поскольку он уже зарегистрировал эти URL-адреса в стеке исполнения casperjs.

Вам нужно сделать так

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

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

Теперь вызовите метод get this this

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

 })

licensed under cc by-sa 3.0 with attribution.