我有这样的代码:
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中使用任何“全局”变量?
答案 0 :(得分: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
});
答案 1 :(得分: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;
}
但我仍然建议重构代码并仅在回调中使用变量。
答案 2 :(得分:0)
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]
);