このフォーラムや他のフォーラムからいくつかの解決策を試しましたが、何もうまくいかないようです。これが論理的な問題であり、単に私が望む方法で実行できないのか、それとも正しい方法でリターンにアクセスしていないのかはわかりません。
私がやろうとしているのは、一連のリンクをリストすることです (コードは外部ファイル Main.js にあります)。リンクをクリックすると、ID を取得し、それを使用して 2 番目の ajax 呼び出しを行い、開くと 2 番目のウィンドウも開きます。 (コードは外部ファイル Cites.js にあります) をクリックすると、リンクに関する詳細情報が表示されます。
問題は、私の Cites.js ファイルで使用される Main.js の 2 番目の ajax 呼び出しから ID を取得できないことです。2 番目の 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);
});
助けてくれてありがとう