1

上司から、開発中のウェブサイトのいくつかのページに Javascript を追加するように依頼されました。私はまったくの Javascript 初心者です (私は根っからの PHP コーダーです) が、2 日間 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); すると正しい値が表示されるので、これは知っています。

ただし、アラート(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 に答える