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;
}

因此,代码将返回错误值。我如何在不使用 HTML 文档的 DOM 的情况下为变量赋值,例如为某个标签的 html 属性赋值,然后通过 jQuery 获取?

如何在 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

从 1.5 版开始,jQuery 提供了使用Defered对象来处理回调和异步调用管理的实用程序。使用这些类型的对象,客户端可以更轻松地添加在完成某些后台工作时调用的回调。这是使用您的代码的示例:

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 回答