casperjs 无法识别存储在 then 语句之间的全局变量
casperjs does not recognize global variable stored between then statements
所以我调用第一个 url ... 它 returns 一个 JSON 对象,我将 JSON 对象存储在一个名为 [=14= 的全局变量中] ....然后我使用 global_input.token
打开一个 link
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
[debug] [phantom] opening url: http://localhost/client/charg/go/xxx, HTTP GET
我错过了什么吗?
您的 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() {
})
所以我调用第一个 url ... 它 returns 一个 JSON 对象,我将 JSON 对象存储在一个名为 [=14= 的全局变量中] ....然后我使用 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
[debug] [phantom] opening url: http://localhost/client/charg/go/xxx, HTTP GET
我错过了什么吗?
您的 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() {
})