1

我的老板要求我在我们正在开发的网站的几个页面中添加一些 Javascript。我是一个完全的 Javascript 菜鸟(我本质上是一个 PHP 编码器),但我已经学习和使用 Javascript 两天了,直到现在,一切都进行得很顺利。

现在我遇到了一个问题。我认为它与变量作用域有关,并且我认为我理解变量作用域,但我正在为这个非常(可能)非常简单的任务而苦苦挣扎。如果我有更多的时间来学习如何使用 JS,我会在来找你们之前再试一试,但我需要在下周一之前找到一些可行的东西。快到了..

代码在下面,下面进一步解释。

var activeTopic;
$.post("test.php",
    {
        request:"getActiveSection",
        courseid:courseid
    },
    function (data, status) {
        if (data != "none") {
            activeTopic = data;
            displayActiveTopic();
        }
    });
alert(activeTopic);

我正在使用 Jquery 的 POST 函数来调用 test.php。PHP 获取课程 ID 并返回当前活动的主题。PHP 代码返回正确的值。我知道这一点,因为如果我 alert(data);,则会显示正确的值。

但是,如果我 alert(activeTopic); 在函数之外,我注意到全局变量 activeTopic 没有改变。为什么?

在此先感谢您的帮助。当我有时间的时候,我会花更多的精力来学习 JS。到目前为止,这很有趣……与 PHP 非常不同,但仍然很有趣。

4

2 回答 2

5

这与范围无关,与时间有关。

  1. 你声明一个变量activeTopic
  2. 你发送一个 HTTP (post)请求
  3. 你提醒activeTopic

稍后,HTTP响应到达时,会为 分配一个值activeTopic

您需要处理当前activeTopic.

于 2013-01-31T16:02:09.283 回答
4

$.post 是一个异步函数。因此,当调用 alert() 时,帖子仍在运行。将警报放入您的回调函数中,该函数将在 post 调用完成时调用。

于 2013-01-31T16:02:44.490 回答