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 中)并且它们正在返回相关数据 - 这个问题似乎或多或少涉及我的成功没有被评估。好吧,无论如何,我的第一个成功是。

编辑:我还应该提到,这绝不是“最终”代码——我最终计划通过一次调用等来完成所有事情,但这个错误在这个原型阶段确实让我感到困惑。

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 回答