阿贾克斯回调.不理解 ajax 回调
Ajax callback. Do not understand the ajax callback
我正在从文件中获取数据,在这种情况下它是/notes.html
.我正在尝试将 ajax 调用的结果存储在变量中,但它一直返回未定义,但是当我在 chrome 开发人员工具中运行该函数时,它会返回 /notes.html
的内容。这是我修改的用于记录数据的简单代码:
var ajax = {};
ajax.result = Array();
ajax.fetch = function(urls,datas){
$.ajax({
url: urls,
type: 'post',
data: datas,
success: function(data){
console.log (data);
}
});
}
ajax.fetch('/notes.html',{});
现在这就是我要说的。如果我们更改console.log
并将其变成 return
,然后console.log
ajax.fetch
调用,我们将得到未定义。
当我将其保存在ajax.result
中,然后在chrome dev.工具中调用它时,内容显示在chrome dev.工具中,但我无法在基本javascript中使用它。
页面在这里。这是一个空白页,但您可以在控制台中看到它使用上面的代码打印的内容。
ajax 本质上是一个延迟调用,所以你从函数返回什么真的无关紧要,原始 fetch 已经退出并返回未定义不久前......
您可以将回调传递给 fetch 来解决此问题:
var ajax = {};
var result;
ajax.result = Array();
ajax.fetch = function(urls,datas, callback){
return $.ajax({
url: urls,
type: 'post',
data: datas,
success: function(data){
callback(data);
}
});
}
ajax.fetch('/notes.html',{}, function (data) {
// execute result related code here to ensure variable already assigned
});
如果执行跟踪,将获得以下执行:
- 声明 AJAX
- 结果已声明
- AJAX设置为
{}
- ajax.result 设置为一个新的数组(顺便说一句,你应该使用 [] 而不是 Array 以避免潜在的原型疯狂)
- ajax.fetch 设置为函数
- 调用 ajax.fetch,使用匿名函数作为回调
- $.ajax 被称为
- ajax.fetch 返回(这就是你的 undefined 的来源,现在它将返回一个 jQuery 延迟对象)
- 调用成功回调
- 传递的回调被调用
- 成功回调返回(无法捕获返回值,因为 fetch 已在 8 中返回)
- 完成回调是代码(由于闭包,您可以使用获取的数据)
对 $.ajax() 的调用在发出请求后立即返回,因为它默认以异步模式运行。$.ajax 调用的返回值不是成功函数的返回值。开启同步行为:
ajax.fetch = function(urls, datas)
{
result = null;
$.ajax({ url: urls,
type: 'post',
data: datas,
async: false,
success: function(data) { result = data; } });
return result;
}
或者只是这样做:
$.ajax({ url: urls,
type: 'post',
data: datas,
async: false }).responseText;
相关文章:
- 从AJAX回调函数中分离数据
- 如何从ajax成功回调函数中读取javascript变量
- 如何处理Ajax.BeginForm()OnError OnFailure回调
- 在AJAX中使用window.location.replace'成功'回调
- AJAX之前的Dojo回调
- 如何在ajax回调中使用类变量
- AJAX成功回调-执行javascript时出现问题
- 当使用命名函数作为jquery ajax成功回调时,我需要括号吗
- jQuery AJAX错误回调未运行
- 使用Javascript通过ajax回调更新DOM
- 在Ajax中难以在JavaScript中使用回调
- 在firefox中,使用jquery ajax不会调用错误和完整回调
- Backbone,Coffescript-在AJAX中将函数作为回调传递
- php执行后的Ajax回调
- AJAX 回调在 Firefox 中失败
- $.mobile.changePage 之后的回调函数通过 AJAX 加载
- 从类方法中的 ajax post 函数回调函数更改 javascript 类属性
- 需要Javascript回调ajax解释
- web服务正在调用错误回调(ajax)
- 选择initselection回调ajax -不加载默认值