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
是异步的。请自己做研究