jQuery方法,JavaScript中的变量范围

jQuery方法,JavaScript中的变量范围,jquery,ajax,variables,scope,Jquery,Ajax,Variables,Scope,我有这样的代码: 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

我有这样的代码:

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文档的DOM的情况下为变量赋值,例如为某个标记的HTML属性赋值,然后通过jQuery获取该值


如何在JavaScript中使用任何“全局”变量

因为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
});

因为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
});

在执行异步调用时不能执行此操作。您可以强制同步调用,但这将导致在服务器返回响应之前冻结页面。将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;
}

但我仍然建议重构代码,只在回调中使用变量。

在执行异步调用时不能这样做。您可以强制同步调用,但这将导致在服务器返回响应之前冻结页面。将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;
}

但我仍然建议重构代码,只在回调中使用变量。

jQuery从1.5版开始,就有了一些实用程序,可以使用调用的对象处理回调和异步调用的管理。使用这些类型的对象,客户机可以更容易地添加回调,以便在某些后台工作完成后调用。下面是使用您的代码的示例:

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]
);

从1.5版开始,jQuery就有了一些实用程序,可以使用调用的对象处理回调和异步调用的管理。使用这些类型的对象,客户机可以更容易地添加回调,以便在某些后台工作完成后调用。下面是使用您的代码的示例:

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]
);

不能从异步函数返回。将依赖于
变量\u to\u return
的任何代码移动到成功回调中。
$。ajax
是异步的。请自行研究无法从异步函数返回的内容。将依赖于
变量\u to\u return
的任何代码移动到成功回调中。
$。ajax
是异步的。请自己做研究