3

ファイルの 1 つで、次のように呼び出します。

var jobsString = getDropdownJobs();

この関数を呼び出します:

function getDropdownJobs() {

    var jobsString = amplify.store("JobsList");

    if (typeof jobsString === 'undefined') {

        // Amplify sends a request for getJobs, if it exists in cache, it will return that value.
        // If it does not exist in cache, it will make the AJAX request.
        amplify.request("getJobs", function (data) {

            // Leave a blank option for the default of no selection.
            var jobsString = '<option value=""></option>';
            // Append each of the options to the jobsString.
            $.each(data.jobs, function () {
                jobsString += "<option " + "value=" + this.JobNo_ + ">" + this.JobNo_ + " : " + this.Description + this.Description2 + "</option>";
            });
            // Store the jobsString to be used later.
            amplify.store("JobsList", jobsString);

        });
    }
    return jobsString;

}

の増幅定義"GetJobs"は次のとおりです。

amplify.request.define("getJobs", "ajax", {
    url: "../api/Job/Jobs",
    dataType: "json",
    type: "GET",
    cache: "persist"
});

それが戻るときはいつでも、それは未定義です。AJAX 定義に "async: false" を入れましたが、何も変わりませんでした。

戻る前に値がそこにあることを確認するにはどうすればよいですか?

4

3 に答える 3

2

Amplify には詳しくありませんが、その APIには次のように書かれています

を通じて行われたリクエストは、amplify.request常に非同期で解決されます

そのため、コールバックを に渡して、が満たさgetDropdownJobsれた後に実行する必要がjobsStringあり、その値に依存するすべてのコードがその中に入ります。

別の方法として、Amplify の pub/sub システムを使用して、jobsStringが満たされたときにイベントをサブスクライブし、 getDropdownJobs.

于 2012-11-14T21:03:15.613 に答える
1

質問を誤解している場合は申し訳ありませんが、このような非同期リクエストを行うたびに、回答を待つ必要があります。代替案を提案する前に、私が従う傾向がある簡単なヒントをいくつか示します。

  • 通常、あなたのようなメソッドはgetJobsDropdown何も返さないか、promise を返す可能性があります。jquery promisesを参照するか、同じpromise の連鎖に関するより高度な資料については、この記事を参照してください。
  • 使用できる最も簡単なことは、コールバック、getJobsDropdownつまりデータを処理する呼び出し側のコンテキストのメソッドです。これにより、データの準備ができたときにプログラムを再開できます。

これを試して:

function getDropdownJobs(callback) {

    // some code (...)

    amplify.request("getJobs", function (data) {

       // your processing and when done
       callback();

    });
}

コールバックでデータを渡すことができる可能性があります。の通常の呼び出しはgetDropdownJobs次のとおりです。

function processResults() { // This is your callback }

function getData() {

    // This is where you call getDropDownJobs
    getDropDownJobs(processResults);
}

これは役に立ちましたか?そうだといい。

乾杯。

于 2012-11-14T21:07:11.637 に答える
0

jQuery を使用していて、jQuery フレームワークとの結合を気にしない場合は、このプラグインを使用して、jQuery の遅延オブジェクトを利用できます。

増幅要求遅延プラグイン

これは、いくつかの背景情報とプラグインの使用法の概要を含む記事です。

AmplifyJS リクエストへの jQuery Deferred サポートの追加

于 2012-11-21T15:42:57.783 に答える