1

switch case ステートメントのいずれかのケース内にリクエストがある小さなコードがあります。

var id;
switch(type){
    case 'type1':
        //some code
        break;

    case 'type2': case 'type3': case 'type4': 
        //some code 
        ajax.get('url', 'JSON', 
            function(response) {
            //callback for success  
                dosomething(response, id);
            },
        function(response) {
            //call back for failure
                dosomethingelse();
        }
          );
    break;
}

type2 type3 type4 の場合、リクエストは送信されていますが、その場合はレスポンスを取得する前に壊れます。変数「id」はスイッチ呼び出しごとに変化するため、応答を取得するまでに、id の値が異なります。

応答を受け取ったケースをどのように打破できますか? 中に入れてみましたが、うまくいきません。エラーが発生します。

4

1 に答える 1

2

Ajax は非同期です。つまり、呼び出しが終了するのを待たずに、残りのコードを処理し始めます。

ajax呼び出しをanon関数でラップして、id値を保持できるようにします

var id;


switch(type){
    case 'type1':
    //some code
    break;

    case 'type2': case 'type3': case 'type4': 
    //some code
    (function(id){
        ajax.get('url', 'JSON', 
            function(response) {
            //callback for success  
            dosomething(response, id);
            },
            function(response) {
                //call back for failure
                dosomethingelse();
            }
        );
     })(id);
    break;
}
于 2013-06-29T08:34:36.853 に答える