我試過這個論壇和其他人的幾個解決方案,但似乎沒有任何工作。我不確定這是否是一個邏輯問題,只是不能按照我想要的方式完成,或者我只是沒有以正確的方式訪問回報。爲什麼我沒有得到任何數據時,試圖使用從我的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);
});
感謝您的幫助
你爲什麼從click處理程序返回一個ajax承諾? – Bergi 2013-02-21 21:25:43
當我嘗試在單擊事件之外執行此操作時,我無法獲取該id,然後在ajax調用中使用它以首先查看它是否返回大於0的長度。所以,我在 – jc72 2013-02-21 21:29:09