为什么我没有得到任何数据时,试图使用从我的ajax呼叫返回的承诺
问题描述:
我试过这个论坛和其他人的几个解决方案,但似乎没有任何工作。我不确定这是否是一个逻辑问题,只是不能按照我想要的方式完成,或者我只是没有以正确的方式访问回报。为什么我没有得到任何数据时,试图使用从我的ajax呼叫返回的承诺
我想要做的是列出一组链接(代码是在一个外部文件Main.js),当链接被点击时采取id并用它来做第二个Ajax调用,并打开也将打开第二个窗口(代码位于外部文件Cites.js中),并提供更多关于点击链接的信息。
问题是我无法从我的Cites.js文件中使用的Main.js中的第二次ajax调用获得id。我试图返回第二个Ajax调用,然后使用.done()来获取返回的数据或尝试获取全局变量projectId。
下面是我的Main.js
var projectId = '';
var promise = $.ajax({
type: 'GET',
url: 'https://www.sciencebase.gov/catalog/items?parentId=504108e5e4b07a90c5ec62d4&max=60&offset=0&format=jsonp',
jsonpCallback: 'getSBJSON',
contentType: "application/json",
dataType: 'jsonp'
}).then(function(json) {
var linkBase = "http://www.sciencebase.gov/catalog/item/";
var link = "";
var itemId = "";
var urlId = "";
var itemLinkLength = "";
$.each(json.items, function(i,item) {
link = linkBase + this.id;
$('#sbItems').append('<li><b><a href="' + link + '" id="idNum' + i + ' ">' + this.title + '</a> - </b>' + this.summary + '</li>');
});
$('#sbItems a').on('click', function (e) {
e.preventDefault();
var str = $(this).attr('id');
if (str.length == 7) {
itemId = str.slice(5,6);
} else if (str.length == 8) {
itemId = str.slice(5,7);
}
urlId = json.items[itemId].id;
//alert(urlId);
return $.ajax({
type: 'GET',
url: 'https://www.sciencebase.gov/catalog/itemLink/' + urlId + '?format=jsonp',
jsonpCallback: 'getSBJSON',
contentType: "application/json",
dataType: 'jsonp',
success: function(json) {
if (json.length > 0) {
projectId = json.id;
window.open('Citations.html', '_self');
} else {
var page = linkBase + urlId;
window.open(page);
}
},
error: function(e) {
console.log(e.message);
}
}); // END 2nd ajax
}); // END Click event
}); // END promise
代码,以下是我打电话是它在我Cites.js
promise.done(function() {
alert(projectId);
});
感谢您的帮助
答
你做promise = $.ajax(…).then(function(){…})
- 但then
方法确实为匿名函数的结果创建了新的承诺(在jQuery的旧版本中,这是pipe
) - 请参阅al所以pipe() and then() documentation vs reality in jQuery 1.8。
但是,由于您不会从anon函数中返回任何内容,因此您将不会收到任何内容promise.done()
。
如果你想做一个链ajax-> click-> ajax-> done,你将需要手动构建点击处理程序的承诺。
你为什么从click处理程序返回一个ajax承诺? – Bergi 2013-02-21 21:25:43
当我尝试在单击事件之外执行此操作时,我无法获取该id,然后在ajax调用中使用它以首先查看它是否返回大于0的长度。所以,我在 – jc72 2013-02-21 21:29:09