$.ajax({
type: "POST",
url:"example.com",
success: function (data) {
myData = data;
},
error: function (response) {
}
//here json = myData;
});
我必须在ajax()的回调函数之外做json = myData
以使其成为一个全局变量,我想这是一个好习惯吗?我怎样才能使用我的ajax回调数据?
答案 0 :(得分:3)
为什么要打破Ajax设计的异步特性呢? StackOverflow上反复询问过类似的“问题”。但是他们忘记的一个关键问题是Ajax被设计为异步,并且通过尝试使用函数之外的数据,你有点违反了规则。
TL; DR:Ajax被设计为异步,让我们保持这种方式。
如果你想保持整洁的结构,请定义一个处理程序。
function handler(data) {
// Handle data
console.log(data)
}
$.ajax({
url: "http://localhost",
type: "POST",
data: {'example':true},
success:handler
});
如果你确实需要执行同步Ajax请求(sjax?Lol,jQuery确实提供了“关闭异步性质”的功能,那么在对象中使用async: false
似乎可以解决这个问题。例如:
var outterData;
$.ajax({
async: false,
url: "/echo/json/",
data: {testing:true},
success: function(data){
outterData = data;
}
});
console.log(outterData);
如您所见,async: false
包含在此内容中。它似乎工作正常,基于this JSFiddle内置。
但是请记住,我不建议你带走Ajax的异步特性(它在名称中,因为大声喊叫)。但如果你必须的话。