这是我的jQuery代码。我基本上是在抓取一些基于IP的坐标,然后检索该位置的一些记录。我遇到的问题是从第一个ajax调用中检索的参数对第二个ajax调用不可用。我是defer的新手,并不真正理解为什么这不起作用?我在代码中留下了一些评论作为问题和问题所在。一个完整的答案将解释我所缺少的内容及其重要性。我试图绕过这个来使我的代码更清洁而不是嵌套调用。
$(document).ready(function() {
$('#button').on('click', function() {
//if the first call is successful then run the second function
//is done the correct thing to use here?
getLocation().done(getRecords);
});
//this works fine as i get the coordinates
function getLocation() {
return $.ajax({
dataType: "json",
url: 'http://ipinfo.io/json',
success: function(response) {
var coordinates = response.loc.split(',');
return coordinates;
}
});
}
function getRecords(coordinates) {
return $.ajax({
dataType: "json",
url: 'some url',
data: {
//this does not work as coordinates are undefined
lat : coordinates[0],
lon : coordinates[1],
},
success: function(response) {
//do more stuff
}
});
}
});
答案 0 :(得分:3)
要使此工作与您期望的一样,您需要删除success:
,而是使用.then
,以便您可以将值传递给链中的下一个承诺。
function getLocation() {
return $.ajax({
dataType: "json",
url: 'http://ipinfo.io/json'/*,
success: function(response) {
var coordinates = response.loc.split(',');
return coordinates;
}*/
}).then(function (response) {
var coordinates = response.loc.split(',');
return coordinates;
});
}
答案 1 :(得分:1)
您的问题success
处理程序的结果未传递给done
处理程序。原始response
已通过。您可能想要then
。
然而,绝对没有理由在 2016 中使用jQuery。
答案 2 :(得分:-2)
您的函数调用是向后的。尝试:
getRecords(getLocation());