2013-02-21 57 views
1

我会尽力使这一尽可能广泛(我是相当新的使用AJAX的工作),但我离题。jQuery函数调用多个Ajax函数;只有第一个AJAX工作

目前,我有一个调用不同功能的函数 - 所以,getContents()调用的GetWeather(),getMovies()等

在每个所说的getXXXX的()函数,有一个AJAX调用到一些PHP的东西 - 然后我使用一个函数来通过数据,并采取我所需要的 - 一切美好和花花公子。

然而,只有的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文件在网络(至少在铬)上执行,他们正在返回相关的数据 - 这个问题似乎或多或少涉及不被评价自己的成功。那么,我的第一个成功就是,无论如何。我也应该提到,这绝不是'最终'的代码 - 我最终打算用一个电话或类似的东西做所有事情,但是这个bug在这个原型阶段肯定让我困惑不已。

回答

0

Ajax请求是asyncronous,幸运的是他们返回扩展递延对象的对象,因此使用这样的:

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请求的结果,这样就可以使用延迟对象的.done。

+0

啊,这非常有意义。我有一种感觉,我不得不等待。谢谢! – eric 2013-02-21 18:30:48