namespace.items.Load = function (arg1, arg2) {
$.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 }, function (Items) {
return Items;
});
}
上述对象“项目”是否超出范围或某事?因为在调用这个函数之后我得到的都是“未定义的”。我该如何解决这个问题?
答案 0 :(得分:2)
getJSON
请求是异步的,因此您还必须向items.Load
函数提供回调。
namespace.items.Load = function (arg1, arg2, callback) {
$.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 }, callback);
};
答案 1 :(得分:1)
$ .getJSON实现了promise接口,所以你应该能够这样做:
namespace.items.Load = function (arg1, arg2) {
return $.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 });
}
namespace.items.Load().then(function (items) {
console.log(items);
});
答案 2 :(得分:1)
首先,return
函数中没有Load
语句。在这种情况下,默认情况下它将返回undefined
。到目前为止没有任何意外,但我想你更愿意这样做:
namespace.items.Load = function (arg1, arg2) {
return $.getJSON(
"/Object/Items",
{ "Arg1": arg1, "Arg2": arg2 },
function (Items) { return Items; }
);
}
那就是说,请记住,幕后有一个Ajax调用导致这种情况:
function (Items) { return Items; }
被召唤。您期望Load
函数返回的内容显然不是Items
。因此,您可以使用此类解决方案:https://stackoverflow.com/a/18793057/1636522。
答案 3 :(得分:0)
AJAX方法立即返回,因此将返回undefined。如果要使用那些“项目”结果,例如将它们分配给可由命名空间中的其他函数访问的变量,则需要指定回调函数。
namespace.itemList = {};
namespace.items.Load = function (arg1, arg2) {
$.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 }, function (Items) {
namespace.itemlist = JSON.parse(Items);
});
}