无法获取全局变量

Posted

技术标签:

【中文标题】无法获取全局变量【英文标题】:Can't get global variable 【发布时间】:2015-12-09 19:57:53 【问题描述】:

这里是window: 所以现在,当我向下滚动时(孩子们以与上面显示的方式相同的方式出现,一直很长),我看到了我想要的: 但我只是无法访问它。为什么?

这里的代码,在一个位于 js 文件夹中的函数中:

function update_match(slot, match, s) 
    $("#match" + slot + " i").text(match);
    console.log(window);
    console.log(window.saves1);          // undefined
    console.log(window.external.saves1); // undefined
    (slot == 1) ? window.saves1.item = s : window.saves2.item = s;

变量是这样创建的:

function set_global(name, pos, ab, needSave, s) 
    window.saves1 = item: s;
    window.saves2 = item: s;

在 js/main.js 文件中。

文件结构是这样的:

index.php (where the php code runs and calls update_match())
js - main.js
   - read_match.js

【问题讨论】:

你什么时候调用这个update_match函数,从哪里来的? Remember that the console is lying 你有多个 iframe 吗? 我在 index.php 的底部调用它@Bergi。在index.php文件所在的目录下,js文件夹也是如此。 @LucianDepold 据我所知,但我使用的是 jquery mobile,可能会导致问题吗? 不,我不这么认为 【参考方案1】:

你运行 update_match 太早了。

似乎在您运行 update_match 时,尚未定义全局变量。它们是稍后创建的。但是因为console.log,当时没有回显窗口对象的快照,它显示了全局变量,因为在你的脚本结束时它们被创建并且console.log显示了“完成”的窗口对象。

要解决您的问题,请稍后运行 update_match,无论是在文档准备好之后还是使用 setTimeout 函数并有合理的延迟:

setTimeout(function() update_match(); , 500);

要在文档准备好后运行该函数,请看这篇文章:

jQuery Mobile: document ready vs page events

你可以这样做:

$(document).ready(function()  

update_match();

);

【讨论】:

我必须在该函数中传递 PHP 变量,所以我认为唯一的方法是使用 AJAX 调用。但是,所有这些错误捕获让我比 Snorlax 更饿,所以我会在饭后编写代码。谢谢! 好主意卢锡安!实际上,他得到了那个效果,他的必杀技是身体猛击!现在,关于我们的话题,我有一些问题,也许你可以看看:***.com/questions/32554733/…

以上是关于无法获取全局变量的主要内容,如果未能解决你的问题,请参考以下文章

python多处理子进程无法访问全局变量

我的第一个项目 :处理全局变量(解决模块化后变量无法获取的问题)

无法将坐标放入全局变量 [CLgeocoder, swift4]

Delphi 中全局变量无法被修改

无法将数据从地理编码器保存到全局变量 [重复]

vue3 如何定义全局变量