Javascript全局变量不起作用&;更多 我对下面的代码有几个问题:
我在第11行定义了一个名为iMax的全局变量。但如果我试着在17号线上打电话,那就不行了。为什么?[回答]Javascript全局变量不起作用&;更多 我对下面的代码有几个问题:,javascript,node.js,global-variables,Javascript,Node.js,Global Variables,我在第11行定义了一个名为iMax的全局变量。但如果我试着在17号线上打电话,那就不行了。为什么?[回答] 由于节点模块“cheerio”和“request”,此脚本在web浏览器中不起作用,但它在本地命令提示符下起作用。有没有办法让另一个javascript在网页中运行,与之共享变量,并执行此javascript以在网页上运行(本地)?这两个Java脚本将位于同一目录中。[未答复] 当我删除“URL=[];”时奇怪的是,我从第3行得到一个错误,上面写着: 请求(“” 语法错误:意外标记( 这对
请求(“”
语法错误:意外标记(
这对我来说毫无意义,因为“URL=[];”在代码中没有任何用途。知道为什么会发生这种情况吗?[已回答]
1 var request=require('request'),
2 cheerio=要求(“cheerio”),
3个URL=[];
4.
5.
6请求('http://forum.blockland.us/index.php?action=profile;u=137487;sa=showPosts',函数(err、resp、body){
7如果(!err&&resp.statusCode==200){
8 var$=零荷载(主体);
9$('b:contains(…)','tr.catbg3')。每个(函数(){
10 totalPages=$(this.next().text();
11 iMax=(总页数-1)*15;
12 });
13 }
14 });
15
16
17对于(i=0;i您可能应该在调用请求之前定义变量:var iMax;
在全局范围内或使用window.iMax=(totalPages-1)*15;
。但事实上,您应该在请求函数中使用for循环,因为如果您没有在顶部设置iMax
声明var iMax={一个默认值,那么它可能是不必要的
现在,您实际上是在实际声明iMax之前调用for循环。当您删除带有url=[];
的行时,您实际上也删除了分号;
这使得下一行成为声明行,这意味着行cheerio=require('cheerio'),
之后的所有内容都成为变量的另一个声明。语法错误
所以,一定要删除行URL=[];
但要用分号替换逗号,这样你就有了cheerio=require('cheerio');
“当你只有一把锤子时,一切看起来都像钉子”。你没有以正确的方式使用正确的技术来实现你的目标
浏览器中运行的JavaScript是在客户端的沙箱上运行的,因此在服务器上设置全局变量(然后运行node.js实例)可能是不切实际的
你可能需要的是一个轻量级的web服务器…如果你愿意,Node可以为你做这件事,并将帖子收回。简单的HTTP服务器是第一个Node.js教程之一。然后你可以用帖子信息做你想做的事
实际上,一个带有脚本模块的简单web服务器,可以传递信息并运行node.js,这可能是实现可持续性的最简单方法
其他海报是正确的,注意JavaScript中单行上的多个语句,这被认为是不好的做法。异步JavaScript不是一个问题吗?虽然声明的变量是在任何代码执行之前创建的,但隐式全局变量在创建它们的表达式执行之前是不存在的。因此iMax不是created,直到请求返回,但您尝试在调用请求后立即访问它。请坚持每个帖子一个问题。这个问题的答案变得相当混乱。是的,我明白您的意思(我原本打算让每个问题的数字更有条理)。这是我在这个论坛上发布的第一个问题,所以我还不知道其中的诀窍。我来自一个论坛,在第13行和第14行的内容之间插入for循环非常有效。太棒了。现在我只需要回答其他两个问题。我很难找到“简单HTTP服务器”Node.js教程。我真的很抱歉我不熟悉你提到的东西(我三天前开始写javascript哈哈)
1 var request = require('request'),
2 cheerio = require('cheerio'),
3 urls = [];
4
5
6 request('http://forum.blockland.us/index.php?action=profile;u=137487;sa=showPosts', function(err, resp, body){
7 if(!err && resp.statusCode == 200){
8 var $ = cheerio.load(body);
9 $('b:contains(...)', 'tr.catbg3').each(function(){
10 totalPages = $(this).next().text();
11 iMax = (totalPages - 1) * 15;
12 });
13 }
14 });
15
16
17 for(i = 0; i <= iMax; i += 15)
18 {
19 console.log(i);
20 }