你可以包装这段代码,以便在调用函数时返回包含json对象的变量吗?
示例:
function GetNewSomething() {
var newtb = 0;
$.get("/something/new",
function (data) {
newtb = data;
}
);
return newtb; // as of now this always returns undefined...
}
尝试这种方式,但只返回undefined ..
先谢谢你们!
的问候,
答案 0 :(得分:6)
你做不到。 Ajax调用是异步的。你必须将回调传递给你的函数:
function GetNewSomething(cb) {
$.get("/something/new", cb);
}
并将其命名为:
GetNewSomething(function(data) {
// do something with data
});
哦,如果响应是JSON字符串,您可能希望使用.getJSON
,它也会将响应解码为JavaScript对象。
答案 1 :(得分:3)
.get()
是$.ajax()
的包装器。如果没有明确配置,则所有AJAX请求都运行 asyncronously 。这反过来意味着,return newtb;
语句将在$.get()
完成之前发生。
解决此问题的一个好方法是自己调用另一个回调。这看起来像是:
function GetNewSomething(callback) {
$.get("/something/new",
function (data) {
if( typeof callback === 'function' )
callback.apply(this, [data]);
}
);
}
然后将其称为
GetNewSomething(function(data) {
// do something with data
});
答案 2 :(得分:0)
$.get
是异步的,这就是你在get请求返回时传递一个函数来调用的原因。
答案 3 :(得分:0)
您可以更改为使$.get
成为$.ajax
并使其同步,因为$.get
只是$.ajax
的包装:
function GetNewSomething() {
var newtb = 0;
$.ajax({url:"/something/new",
type:"GET",
async:false,
success: function (data) {
newtb = data;
}
});
return newtb;
}