1
namespace.items.Load = function (arg1, arg2) {
    $.getJSON("/Object/Items", { "Arg1": arg1, "Arg2": arg2 }, function (Items) {
        return Items;
    });
}

上記のオブジェクト「アイテム」は範囲外ですか?この関数を呼び出した後、私が得るのは「未定義」だけだからです。どうすればこれを修正できますか?

4

4 に答える 4

1

まず、関数return内にステートメントがありませんLoad。この場合、undefinedデフォルトで返されます。これまでのところ予期しないことは何もありませんが、次のようなことをやりたかったのでしょう。

namespace.items.Load = function (arg1, arg2) {
    return $.getJSON(
        "/Object/Items", 
        { "Arg1": arg1, "Arg2": arg2 }, 
        function (Items) { return Items; }
    );
}

そうは言っても、この種のシナリオをもたらす Ajax 呼び出しが舞台裏で行われていることに注意してください。

  1. Load 関数が呼び出されます。
  2. Ajax リクエストがリモート サーバーに送信されます。
  3. ロード機能が戻ります。
  4. Ajax レスポンスが返されます。
  5. function (Items) { return Items; }と呼ばれます。

Load関数によって返されると期待していたものは、明らかにそうではありませんItems。これにより、代わりにこの種のソリューションを使用できます: https://stackoverflow.com/a/18793057/1636522

于 2013-09-17T18:04:26.013 に答える
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);
});
于 2013-09-17T11:31:23.653 に答える