web-dev-qa-db-ja.com

jQuery ajaxの戻り値

どのようにjQuery ajaxから値 "pinNumber"を返して、それをajaxの外に追加できますか?これが私のコードです

 var x = pinLast + 1; 
 for(i = x; i <= pinMany; i ++){
 var i = x ++; 
 var cardNumber = i .toPrecision(8).split( '。')。reverse()。join( ''); 
 var pinNumber = ''; 
 
 jQuery.ajax({
タイプ: "POST"、
 url: "data.php"、
 data: "request_type = generator"、
 async:false、
成功:function(msg){
 var pinNumber = msg; 
 return pinNumber; 
 //ピン番号を返す必要があります
} 
}); 
 
 jQuery( '。pin_generated_table')。append(cardNumber + '=' + pinNumber + '
'); //変数pinNumberはここに移動できるはずです }

わからないことがあったら教えてください。

17
Jorge

AJAXはデフォルトで非同期です。同期呼び出しを行わずにコールバックから値を返すことはできません。これはほぼ確実に行いたくないことです。

実際のコールバック関数をsuccess:ハンドラーに提供し、プログラムロジックをそこに配置する必要があります。

15
meagar
var pinNumber = $.ajax({
    type: "POST",
    url: "data.php",
    data: "request_type=generator",
    async: false
}).responseText;
jQuery('.pin_generated_table').append(cardNumber+' = '+pinNumber+' ');
5
Amjad Masad

変数スコープ と関係があります。作成したローカル変数pinNumberは、そのラッピング関数の外部からはアクセスできません。

おそらく、pinNumberをグローバルに宣言するか、それがうまくいく場合は、単に.append()を成功関数の中に入れます。

4
octopi
var _successEvent = function(response){
    $('.pin_generated_table').append(cardNumber + ' = ' + response);
};

$.ajax({
    type: "POST",
    url: "data.php",
    data: "request_type=generator"
}).done(_successEvent);
3
kayz1

次の例を使用できます。

window.variable = 'some data';

これにより、変数がグローバルになり、どこからでもアクセスできます

1
Grigoriy