0
function GetId() {
    var id;    
    $.post("/Edit/CreateId", function (data) {
        id = data;
    });    
    return id;
}

ただし、IDがサーバーから返される前に戻ります。したがって、idは未定義です。

これを回避する方法はありますか?

4

2 に答える 2

3

post()メソッドは非同期であるため、結果が存在する場合はそのメソッドが起動し、それまで関数successの残りの部分をブロックしません。GetId

(おそらく)望ましい動作を得るには、id値をグローバル変数に割り当てるか(悪い選択)、残りの機能をコールバック関数として(引数として)関数idに直接渡します。post success

function GetId( cb ) { 
    $.post("/Edit/CreateId", function (data) {

        // rest of your program logic will be executed here
        cb( data );

    });    
}
于 2012-04-21T09:11:30.910 に答える
2

いつでもコールバックを渡すか、無名関数を使用できます。それはうまくいくかもしれませんが、おそらく少し不便でしょう。ただし、他の機能がどのように連携するかはわかりません。

function GetId(callback) { 
    $.post("/Edit/CreateId", function (data) {
        var id = data;
        callback(id)
    });    
}

匿名関数での使用例:

GetId(function(id){
    //Do what you need to do.
});
于 2012-04-21T09:08:50.840 に答える