0

以下は私のコードです:

$.post(
    "index.php?component=static_content&action=rules_count", 
    { region:rname,page_url:page_url},
    function(data1) {
        alert(data1);
        var num = $(data1).find('.ruleNum').html();
    }
);
alert(num);

しかし、オンラインalert(num);ではエラーがありますnum is undefined。私が間違っていることは何ですか?

大変助かりました。

4

3 に答える 3

2

ポストコールバック内で変数を宣言したnumため、その関数の外では変数は明らかに未定義です

ただし、外部で定義しても、ajax は非同期であるため、その値は期待どおりに表示されません (そのため、変数にアラートを出すと、ajax 呼び出しがまだ実行されています)。

外部でも num にアクセスする必要がある場合は、変数を渡す別の関数を呼び出すだけです。

$.post(
    "index.php?component=static_content&action=rules_count", 
    { region:rname,page_url:page_url},
    function(data1) {
        alert(data1);
        continueProcess(data1);
    }
});

var continueProcess = function(num) {
   alert(num);
}

またはDeferred Objects( ajaxメソッドがpromiseを返すためjQuery 1.5)を使用することもできます

$.when($.post(...).done(function(num) {
   alert(num)
});
于 2012-05-21T09:39:32.877 に答える
1

numに渡される無名関数のローカル変数です$.post()。関数のスコープ外には存在しませんが、まったく異なるスコープからアクセスしています。

それとは別に、変数は、使用しているときではなく、後で定義されます。それがグローバル変数である場合、POST 操作が終了したにのみ定義されるため、それを使用している時点ではまだ使用できません。

numしたがって、その関数内でのみ使用できます。これはあなたができることの例です:

function numWasReceived(num) {
    alert(num);
}

$.post(
    "index.php?component=static_content&action=rules_count", 
    { region:rname,page_url:page_url},
    function(data1) {
        alert(data1);
        var num = $(data1).find('.ruleNum').html();
        numWasReceived(num);
    }
);
于 2012-05-21T09:38:37.823 に答える
0

numでのみ宣言し$.post()たため、グローバル スコープでは使用できません。

関数とスコープの詳細な説明は次のとおりです: https://developer.mozilla.org/en/JavaScript/Reference/Functions_and_function_scope

于 2012-05-21T09:40:29.117 に答える