7

私のプログラムは JSON 呼び出しの結果をスキップしていると思います。ここでクロージャー関数を作成するか、JSON 呼び出しが戻るまでプログラムを待機させることはできますか?

function username_not_duplicate(username) {
   var function_name = "get_username";
   var parameters = [username];
   var url = "/get_functions.php?function_name=" + function_name + "&parameters=" + parameters;
   $.getJSON(url, function(user_name) {
      if (user_name == true) {     
         return true;
      }
   });
   return false;
}
4

4 に答える 4

13

API 呼び出しは$.getJSON()非同期です。$.ajax()次の方法を使用して、同期させることができます。

function username_not_duplicate(username) {
   var function_name = "get_username";
   var parameters = [username];
   var url = "/get_functions.php?function_name=" + function_name + "&parameters=" + parameters;
   var rslt = false;
   $.ajax({
     async: false,
     url: url,
     dataType: "json",
     success: function(data) {
       if (data == true) {     
         rslt = true;
       }
     }
   });
   return rslt;
}
于 2010-08-05T21:03:42.330 に答える
3

ドリューの答えはほぼ完璧で、IE のブラケットとコンマが 1 つ欠けているだけです。

function username_not_duplicate(username) {
   var function_name = "get_username"; 
   var parameters = [username]; 
   var url = "camps/includes/get_functions.php?function_name=" + function_name + "&parameters=" + parameters;
   var rslt = false; 
   $.ajax({ 
         async: false, 
         url: url, 
         dataType: "json", 
         success: function(data) {
           if (data == true) {                   
             rslt = true; 
           }
        }, 
    });
    return rslt; 
}
于 2010-08-06T03:29:52.640 に答える
1

ええ、非同期(つまり非ブロッキング)であるため、username_not_duplicateすぐに戻ります。ステートメントは、応答ハンドラーから返されるだけです。通常、達成しようとしているそのようなブロッキング呼び出しを行うべきではありません。グローバルなどこかでリクエストの状態を覚えておくことを検討できると思います。falsegetJSONreturn truetrue

于 2010-08-05T21:01:16.000 に答える