使用async:设置为false,函数返回正确的值。但它会阻止浏览器。我试图添加回调,但它没有返回正确的值!
function find_route(array_bustops){
var myresults;
$.ajax({
type: 'POST',
async: true, //with async:false it works
url: 'find_routenum.php',
data:{
array_bustops:JSON.stringify(array_bustops)
},
dataType:'json', //html,xml
success: function(my_results){
myresults=my_results;
},
error:function(x,e){
if(x.status==0){
alert('You are offline!!\n Please Check Your Network.');
}else if(x.status==404){
alert('Requested URL not found.');
}
});
return myresults;
}
WITH CALLBACK:
function find_route(array_bustops,callback){
var myresults;
$.ajax({
type: 'POST',
async: true, //with async:false it works
url: 'find_routenum.php',
data:{
array_bustops:JSON.stringify(array_bustops)
},
dataType:'json', //html,xml
success: function(my_results){
callback(array_bustops,my_results)
},
error:function(x,e){
if(x.status==0){
alert('You are offline!!\n Please Check Your Network.');
}else if(x.status==404){
alert('Requested URL not found.');
}
});
return myresults;
}
function find_route2(myresults){
return myresults;
}
然后我按如下方式调用该函数:
arr_one=find_route(arr,find_route2)
但是arr_one返回undefined。
编辑:它仍然无法使用async:设置为true
答案 0 :(得分:3)
arr_one = find_route(ARR,find_route2)
这与异步无关,而是与代码的架构无关。
你在find_route的范围内声明了我的结果,当你调用find_route时,该函数会返回未定义的myresults的值,因为你只对它进行delcare。
尝试声明var myresults ='somevalue';在你的功能
现在你的函数返回'somevalue'
这是因为对ajax方法的调用不会停止函数执行,并且在调用find_route之后将执行success方法,并且只返回一个console.log,你会看到它最终将获得日志成功被称为。
设置async false时可以正常工作,因为你发现在ajax调用返回之前停止函数执行停止时async为false
编辑:可能的解决方案
function DataListener(val){
this.val = val;
this.remoteFetch();
}
DataListener.prototype.set = function(val){
this.val = val;
this.notifyListener(val)
}
DataListener.prototype.get = function(val){
return this.val;
}
DataListener.prototype.remoteFetch = function(){
$.ajax({
success:$.proxy(this, 'set')
})
}
var arr_one = new DataListener('somevalue');
alert(arr_one.get());// alert somevalue
function doSomething(arr_one_value){
alert(arr_one_value); // the new value set from the ajax call
}
arr_one.addListener(doSomething);
答案 1 :(得分:1)
乍一看,你将两个参数传递给你的回调,但在你的实际回调函数中,你只接受一个。
callback(array_bustops,my_results);
// your callback function
function find_route2(myresults){
return myresults;
}
尝试仅将结果传递给参数。
callback(my_results);
答案 2 :(得分:0)
function find_route(array_bustops){
$.ajax({
type: 'POST',
async: true, //with async:false it works
url: 'find_routenum.php',
data:{
array_bustops:JSON.stringify(array_bustops)
},
dataType:'json', //html,xml
success: function(my_results){
// HOW ABOUT PUTTING THE NEXT DESIRED FUNCTIONALITY HERE? //
return my_results
},
error:function(x,e) {
if(x.status==0) {
alert('You are offline!!\n Please Check Your Network.');
}else if(x.status==404) {
alert('Requested URL not found.');
}
//AND THE DUMMY RETURN VALUE OF THE FUNCTION IS HERE//
return FALSE;
}
});
return myresults;
}