马上,我想道歉,我没有用这个发布代码。我正在开车从事一个项目而我没有互联网。我在很棒的堆栈交换应用程序上。
无论如何,我目前正在处理两个单独的API调用,我知道它们单独工作,但是我需要使用第一个调用中的数据传递给第二个调用,以便动态地使用第二个调用。原因是,第一个AJAX请求是调用Google的地理编码API来获取地址的纬度和经度。第二个需要纬度和经度作为URL参数。
我研究过使用jQuery $ .when和.then,但我无法弄清楚如何将数据从一个AJAX请求传递到另一个。我还尝试构建单独的函数并在另一个内部使用。
我想我的问题是,这是最有效的方法吗?如果是我如何传递数据。
旁注,jQuery中的响应现在很好用。我最终将把这个全部转换为Node,但我只是想先把方法放下来。
答案 0 :(得分:1)
以下是使用$.post()
的示例:
$.post("url_with_address", function(data){
// process geocode API response
$.post("url_with_lat_long", function(response){
});
});
答案 1 :(得分:1)
您可以使用久经考验的异步实用程序库,例如async。这将为您的代码提供未来证明,因为它可以在浏览器和Node中使用。
在指定中,查看允许您将多个异步调用链接在一起的waterfall方法,如果您将来需要添加更多依赖异步调用,这将有助于您管理代码。 / p>
瀑布函数的结构如下。
async.waterfall([
function(callback){
$.post('http://google.com/api/...', data, callback);
},
function(results, callback){
$.post('http://google.com/api/...', results, callback);
}
], function (err, result) {
// all done
});
如果你想使用jQuery,那么$.when
实用程序将没有那么有用,因为它只在每个promise都已解决并且你想在此之前拦截数据时解析。
当然,最简单的方法是在第一个回调中发出第二个AJAX请求。但是,这是让你走上回调地狱道路的绝佳方式。
答案 2 :(得分:1)
如果我纠正你,你可以在第一个成功回调中调用第二个ajax请求,如下例所示
$.get('ur resource URL',function(data){
$.get('new resource URL',{param1: data.param1, param2: data.prama2}, function(data2){
console.log(data2);
});
});