仅当ajax调用完成时才返回函数中的值?
问题描述:
所以我使用mootools,并且我有一个调用ajax脚本来获取值的函数。该值然后在函数中返回。但是,出于某种原因,该函数返回的AJAX调用速度太快!仅当ajax调用完成时才返回函数中的值?
我在做什么错?
function getCredits() {
var loadGlobalTab = new Request.JSON({
url: {my api, url removed for security},
evalScripts : true,
async: false, // I tried this, hoping it would stop the function from returning too soon, but no dice.
onSuccess: function(returnInfo) {
alert(returnInfo.data.total);
return returnInfo.data.total;
}
}).send(sendData); // Where sendData has been defined prior
}
警报返回正确的值,所以我知道AJAX调用的作品,然而,函数本身没有返回,也就是说,虽然AJAX调用正在该功能立即结束。
我试图把一个return 100
底,只是踢,函数返回100
答
AJAX是asynchronous
意思就是说JS将通过它的权利和阅读,如果没有返回正确的,然后,那么什么都没有。
好事做的是一个回调,而不是一回:
function getCredits() {
var loadGlobalTab = new Request.JSON({
url: {my api, url removed for security},
evalScripts : true,
headers: {'ACCEPT': 'json','X_REQUESTED_WITH':'jsonhttprequest'},
onSuccess: function(returnInfo) {
alert(returnInfo.data.total);
//goto callback
getCredits_Callback(returnInfo.data.total);
}
}).send(sendData); // Where sendData has been defined prior
}
function getCredits_Callback(total){
//do something with total
}
第二个办法:
function getCredits() {
var loadGlobalTab = new Request.JSON({
url: {my api, url removed for security},
evalScripts : true,
headers: {'ACCEPT': 'json','X_REQUESTED_WITH':'jsonhttprequest'},
onSuccess: getCredits_Callback
}).send(sendData); // Where sendData has been defined prior
}
function getCredits_Callback(returnInfo){
//do something with returnInfo
}
答
它返回什么,因为你的return语句返回到的属性一个对象,而不是你认为它返回的变量。你最好将你的“onSuccess”函数传递给一个单独的处理函数。这样你可以处理闭包之外的返回值。
+0
可惜upvote?大声笑 – 2011-04-04 16:15:19
答
编辑哦,亲爱的。因打电话而遭到殴打。没关系!
ajax是异步的,使用async:false只是错误的方法。相反,使用onComplete/onSuccess直接调用的查询结果运行第二个回调函数。
如果你真的必须这样做,所以块,那么这个工作得很好:
var blockingCheck = function() {
var obj = {};
new Request.JSON({
url: '/echo/json/',
data: {
json: JSON.encode({
text: 'some text',
array: [1, 2, 'three'],
object: {
par1: 'another text',
par2: [3, 2, 'one'],
par3: {}
}
}),
delay: 3
},
async: false,
onSuccess: function(response) {
obj = response;
}
}).send();
return obj;
};
console.log(blockingCheck());
宾果。我应该问我的as3 dev。该死的。谢谢尼尔! – 2011-04-04 16:11:21
该死,打我。 :D – jlindenbaum 2011-04-04 16:11:54
哈哈没问题^ _^ – Neal 2011-04-04 16:12:04