由于$.ajax GET
的{我认为'的性质,我不确定我在寻找什么是可能的,但我想我应该问,因为它给我带来了一些麻烦。我绝不是JS的专家,如果这很明显,标题很差,不能想出一个不同的方式来道歉。
我在做什么 - 使用$.ajax
从后端API函数中获取值(这些工作)。在success
属性中,我使用匿名函数传递更多数据,否则将无法返回。当单步执行Chrome控制台中的控制台断点时,通常会跳过成功功能,因为它的恢复速度不够快。
我想要什么 - 在下面的示例中,我不希望getStuff
在成功DoSomething
返回之前完成,因为我缺少加载我需要传递给DoSomething
的API数据 - 这可能实现吗?
示例
function getStuff(id, hid) {
$.ajax({
type: "GET",
url: "/api/GetMyStuff/" + id,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (vData) {
DoSomething(vData, id, hid); // not always being hit
}
});
}
答案 0 :(得分:2)
您可以使用async
选项并将其设置为false
以获得同步通话:
function getStuff(id, hid) {
$.ajax({
type: "GET",
url: "/api/GetMyStuff/" + id,
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false, // HERE
success: function (vData) {
DoSomething(vData, id, hid); // not always being hit
}
});
}
但这不是执行ajax请求的好方法,您应该重新考虑您的代码组织(例如为您的getStuff
方法提供回调函数并在{{1}中调用它回调)。
答案 1 :(得分:1)
你要做的事是不可能的。异步性是“漏洞”,这意味着任何需要回调的异步操作(例如$.ajax()
)都必然会强制异步控制流一直到调用链。
请注意,在不久的将来(感谢ES7中的async/await
),这种情况会好一些。异步性仍然是漏洞,但新的关键字使得重构场景比在任何地方手动干扰回调更容易。