我有这段代码:
function aaa (){
var db_data;
$.ajax({
url: "http://localhost:8888/aaa/{{$article->id}}",
type: "GET",
async: true,
dataType: "json",
success: function(data) {
db_data = data;
console.log(db_data);
},
error: function (data) {
console.log(data);
console.log('GRESKA NEKA');
}
});
console.log(db_data);
};
然后我至少得到了行console.log(aaa)
- >未定义...
为什么呢?第一个console.log工作正常,但在ajax之外我无法得到db_data ...为什么?
答案 0 :(得分:2)
您正在订购披萨,然后在送货前尝试吃它! Ajax是一个异步调用,success
在最后console.log
执行后很久才被调用。
您需要仅在回调中使用异步数据。
另一种方法是使用Ajax返回的promise
,这样你的代码就变成了一个函数,它承诺返回数据":
// Return the Ajax promise
function aaa() {
return $.ajax({
url: "http://localhost:8888/aaa/{{$article->id}}",
type: "GET",
async: true,
dataType: "json",
});
}
// and use like this
aaa().then(function(data){
// Do something with the data
}).fail(function(data){
// Do something with the data when it fails
});
Promise使函数可重用。