3

HTMLページに次のjQueryコードがあります。

$.post("MyPHP.php", {category: CATEGORY}, function(data){var test = data;});

しかし、私のページの他の場所ではテストを使用できないようです。私はこれが完了するのAJAXを待たなければならないことを知って$.postいますが、変数テストは決して設定されません。代わりに、戻りデータを使用して段落のinnerhtmlを変更すると、段落は少し遅れて更新されます。

何かご意見は?

編集:それをクラック!$.postreturn関数から別の関数を呼び出すことができます。つまり、次のように関数をfunction(data){setVar(data)});定義するだけです。setVar(data)

function setVar(data){test = data;}

提供されたテストはすでにグローバルスコープで定義されておりvar test;、残りのコード全体で使用できます。

4

2 に答える 2

1

var のスコープが限られているため、テスト変数をよりグローバルなスコープに移動してみてください

var test;
$.post("MyPHP.php", {category: CATEGORY}, function(data){
    test = data;
 });

ajax リクエストは非同期であるため、変数を成功コールバック (実行した) に入れるか、ajax リクエストを同期させる (plz dont do not) か、または使用.whenして、すべての変数が設定されると、ajax 呼び出しに依存するコードが実行されます。

テスト変数をグローバル スコープに移動しても、コンソールにログが記録されるので、このデモを参照してください。undefined

var test;
var x=$.post("MyPHP.php", {category: CATEGORY},, function(data){  
    test = data;   
});
console.log(test);// still undefined    
$.when( x ).then(function(args){
     console.log(test);// your var is set
});

http://jsfiddle.net/C4JnU/1/

于 2012-11-17T21:03:52.483 に答える
0

testajax 成功関数内で変数を宣言したため、そのスコープは成功関数に限定されます。他のコードからアクセスしたい場合は、グローバル スコープで宣言し、success 関数で上書きするだけです。

var test; // delcared in global scope

$.post("MyPHP.php", {category: CATEGORY}, function(data){ test = data;});
于 2012-11-17T21:04:01.127 に答える