所以我使用的是mootools,我有一个调用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。
答案 0 :(得分:4)
编辑哦亲爱的。因打个电话而被殴打。没关系!
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());
答案 1 :(得分:2)
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
}
答案 2 :(得分:1)
它什么也没有返回,因为你的return语句返回到一个对象的属性,而不是你认为它返回的变量。最好将“onSuccess”的功能传递给单独的处理函数。这样你就可以处理闭包之外的返回值。