jQuery支持此功能,只需将选项
async
设置为
false
,函数调用将变为同步,而不是异步。但我建议您保持请求异步,请参见本文末尾的"
推荐解决方案"。
async(布尔值)默认值:true
默认情况下,所有请求都是异步发送的(即默认设置为true)。如果需要同步请求,请将此选项设置为false。跨域请求和dataType: "jsonp"请求不支持同步操作。
请注意,同步请求可能会暂时锁定浏览器,在请求处于活动状态时禁用任何操作。
但我正在使用$.get
,那似乎是针对$.ajax
特定的?
是的,但在幕后,它们完全相同。
jQuery.get ():
This is a shorthand Ajax function, which is equivalent to:
$.ajax({
url: url,
data: data,
success: success,
dataType: dataType
});
示例实现
aft.getToken = function (url) {
var theToken;
$.ajax({
url: url,
dataType: 'html'
success: function (data) {
theToken = $(data).find('input[name=__RequestVerificationToken]').val();
},
dataType: dataType
});
return theToken;
}
推荐解决方案
正如jQuery文档中先前提到的评论所述,异步请求通常不建议使用,往往会带来更多的麻烦。
相反,您应该尝试使用回调或类似的功能来实现所需的功能。
回调是传递给其他函数以处理某些事件(例如数据检索成功)的函数。就像您在自己的代码片段中向$.get
传递回调一样。
让您的函数aft.getToken
接受一个名为callback
的第二个参数,它应该是一个函数引用。然后,在数据检索和“解析”完成时,使用通过ajax请求回复的令牌作为参数调用此函数。
aft.getToken = function (url, callback) {
var dst_object = this;
$.get (url, function (data) {
dst_object.stored_token = $(data).find (
'input[name=__RequestVerificationToken]'
).val ();
callback (dst_object.stored_token);
}, "html");
};
...
aft.getToken ('/path/to/file.html', function (token) {
console.log ("Got token: " + token);
});
...
console.log (aft.stored_token);