namespace.items.Load = function (arg1, arg2) {
$.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 }, function (Items) {
return Items;
});
}
上述对象“项目”是否超出范围或其他内容?因为在调用这个函数后,我得到的只是“未定义”。我怎样才能解决这个问题?
namespace.items.Load = function (arg1, arg2) {
$.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 }, function (Items) {
return Items;
});
}
上述对象“项目”是否超出范围或其他内容?因为在调用这个函数后,我得到的只是“未定义”。我怎样才能解决这个问题?
该getJSON
请求是异步的,因此您还必须为您的items.Load
函数提供回调。
namespace.items.Load = function (arg1, arg2, callback) {
$.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 }, callback);
};
首先,函数内部没有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 。
$.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);
});
AJAX 方法会立即返回,因此将返回 undefined。如果您想使用这些“项目”结果,例如将它们分配给一个变量,您需要指定一个回调函数,该变量可以由您的命名空间中的其他函数访问。
namespace.itemList = {};
namespace.items.Load = function (arg1, arg2) {
$.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 }, function (Items) {
namespace.itemlist = JSON.parse(Items);
});
}