我在将数据从ajax返回到调用函数时遇到问题。当我是console.logging它时,它是未定义的。
我相信我的问题是因为js是异步的,而且当我是console.logging数据时,它还没有准备好。我该怎么做才能解决它?
FooFunction: function(userInput){
var fooData = FooFunction2(userInput);
console.log(fooData); // <--- undefined
},
FooFunction2: function(userInput) {
$.ajax({
url:'./php/test.php',
type:'post',
dataType:'json',
data:{
fooData: userInput
},
success:function(data) {
...manipulating the data...
console.log(manipulatedData); // <--- ['foo', 'foo2'];
return manipulatedData;
}
});
},
答案 0 :(得分:2)
ajax调用是异步的,因此返回将不起作用。更改代码以使用在ajax调用完成时调用的回调。
我更改了你的代码:
FooFunction: function(userInput){
var callbackfunc = function(ajaxData)
{
console.log(ajaxData); //ajax is complete!
};
this.FooFunction2(userInput, callbackfunc);
},
FooFunction2: function(userInput, callbackfunc) {
$.ajax({
url:'./php/test.php',
type:'post',
dataType:'json',
data:{
fooData: userInput
},
success:function(data) {
...manipulating the data...
console.log(manipulatedData); // <--- ['foo', 'foo2'];
callbackfunc(manipulatedData);
}
});
},
答案 1 :(得分:1)
FooFunction2
是对象使用的属性this.FooFunction2
并且您无法从异步方法返回。或者进行ajax调用同步或提供回调。
FooFunction: function(userInput){
var fooData = this.FooFunction2(userInput);
console.log(fooData); // <--- undefined
},
修改后的代码
FooFunction: function(userInput){
this.FooFunction2(userInput, function(fooData){
console.log(fooData); // <--- undefined
});
},
FooFunction2: function(userInput, cb) {
$.ajax({
url:'./php/test.php',
type:'post',
dataType:'json',
data:{
fooData: userInput
},
success:function(data) {
...manipulating the data...
console.log(manipulatedData); // <--- ['foo', 'foo2'];
cb(manipulatedData);
}
});
},