1

私はそのようなコードを持っています:

function some_func_validate(some_id) {
    var variable_to_return = false; // i wanna use that
    $.ajax({
        type: 'GET',
        url: '/something/'+some_id+'/check',
        success: function(response){
            variable_to_return = true; // in this place
        }
    });
    return variable_to_return;
}

したがって、コードは false 値を返します。タグのhtml属性に値を割り当ててからjQuery経由で取得するなど、HTMLドキュメントのDOMを使用せずに変数に値を割り当てるにはどうすればよいですか???

JavaScriptで「グローバル」変数を使用するには?

4

3 に答える 3

1

ajaxは非同期なので、このようなことをする必要があります

function some_func_validate(some_id, cb) {

    $.ajax({
        url: '/something/'+some_id+'/check',
        success: function(response){
            cb(response);
        }
    });

}

そして、それを使用して呼び出します

some_func_validate(some_id, function(response){
    //handle response here
});
于 2012-11-26T09:58:26.697 に答える
0

jQuery には、バージョン 1.5 以降、 Defferedと呼ばれるオブジェクトを使用して、コールバックと非同期呼び出しの管理を処理するユーティリティがあります。これらのタイプのオブジェクトを使用すると、バックグラウンド作業が完了したときに呼び出されるコールバックをクライアントが簡単に追加できます。コードを使用した例を次に示します。

function some_func_validate(some_id) {
    var deferred = $.Deferred(),
        context = {
           id: some_id,
           success: false
        };

    $.ajax({
        type: 'GET',
        url: '/something/'+some_id+'/check'
    })
    .done(function(response){
       context.success = true;
       context.content = response;
       deferred.resolveWith(context);
    })
    .fail(function() {
       deferred.rejectWith(context)
    });

    return deferred.promise();
}

使用例:

some_func_validate(5).then (
    function (context) {
      // Handle successful validation.
      console.log(context);
    },
    function (context) {
      // Handle failed validation.
      console.log(context)
    }
);

別の使用例:

function logger (context) {
   console.log(context);
}

function onSuccessfulValidation (context) {
   // Handle successful validation.
   // context contains {id, content, success}
}

function onFailedValidation (context) {
   // Handle failed validation.
   // context contains {id, success}
}

some_func_validate(3).then (
    [logger, onSuccessfulValidation],
    [logger, onFailedValidation]
);
于 2012-11-26T10:14:57.660 に答える
0

非同期呼び出しの実行中にこれを行うことはできません。同期呼び出しを強制できますが、これにより、サーバーが応答を返す前にページがフリーズします。呼び出しに async: flase スイッチを追加します。

function some_func_validate(some_id) {
   var variable_to_return = false; // i wanna use that
   $.ajax({
       type: 'GET',
       async: false,
       url: '/something/'+some_id+'/check',
       success: function(response){
           variable_to_return = true; // in this place
       }
   });
   return variable_to_return;
}

ただし、コードをリファクタリングし、コールバックでのみ変数を使用することをお勧めします。

于 2012-11-26T09:59:04.917 に答える