1

私はこれをできるだけ広くしようとします (私は AJAX を扱うのはかなり初めてです) が、脱線します。

現在、さまざまな関数を呼び出す関数があります。つまり、getContents() は getWeather()、getMovies() などを呼び出します。

上記の getXXXX() 関数のそれぞれに、いくつかの php への AJAX 呼び出しがあります。次に、関数を使用してデータを調べ、必要なものを取得します。すべて問題なくダンディです。

ただし、 getWeather() のみが実行されます。次の関数は呼び出されません。以下は、関連するコードの一部の抜粋です。問題は AJAX の分離にあると思いますが、確信が持てず、検索してもあまり関連するものは得られませんでした。

ある関数で必要なことを無駄に実行しようとしました-最初のAJAX関数が機能し、他の関数が起動されない順序で再生すると。

function getContent(zipcode){
    getWeather(zipcode);
    getMovies(zipcode);
    getPlaces(zipcode);
    getMorePlaces(zipcode); 
}

getmovies などと同じ

function getWeather(zipcode){
    $.ajax({ 
        url: '/dshbrd/php/weather.php',
        data: "zip_code=" + zipcode,
        dataType: "xml",
        type: 'POST',
        async: 'false',
        success: parseWeatherXml
    });
}

parseMoviesXml などと同じです。

function parseWeatherXml(xml){
    $(xml).find("channel").each(function(){
        /*do stuff*/
    });
}

これは多かれ少なかれ「初心者」の質問であることを認識しています。間違った言葉を使用している場合や実際に十分に検索していない場合はお詫び申し上げます。面白いことに、すべての php ファイルがネットワーク上で (少なくとも Chrome では) 実行され、関連するデータが返されます。とにかく、私の最初の成功は、とにかくです。

編集: また、これは決して「最終」コードではないことにも言及する必要があります。最終的には 1 回の呼び出しなどですべてを実行する予定ですが、このバグは確かにこのプロトタイプ段階で私を困惑させました。

4

1 に答える 1

0

Ajaxリクエストは非同期です。ありがたいことに、Deferredオブジェクトを拡張するオブジェクトを返すので、次のようなものを使用します。

function getWeather(zipcode){
    return $.ajax({ 
        url: '/dshbrd/php/weather.php',
        data: "zip_code=" + zipcode,
        dataType: "xml",
        type: 'POST',
        async: 'false',
        success: parseWeatherXml
    });
}

function getContent(zipcode){
    getWeather(zipcode).done(function () {
        getMovies(zipcode).done(function () {
            getPlaces(zipcode).done(function () {
                getMorePlaces(zipcode)
            });
        });
    }); 
}

各getX関数はajaxリクエストの結果を返すため、Deferredオブジェクトの.doneを使用できることに注意してください。

于 2013-02-21T18:27:10.617 に答える