jQuery函数调用多个Ajax函数;只有第一个AJAX工作

时间:2013-02-21 18:14:28

标签: jquery ajax

我会尝试尽可能广泛地使用它(我对使用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中)并且他们正在返回相关数据 - 问题似乎或多或少涉及我的成功未被评估。好吧,无论如何,我的第一个成功是。

编辑: 我还应该提一下,这绝不是“最终”代码 - 我最终计划用一个调用等来做所有事情,但是这个bug在这个原型阶段肯定让我感到困惑。

1 个答案:

答案 0 :(得分: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。