这是我在第一个文件request.js
中的代码var testId = (function (inId) {
var citeId = inId;
return citeId;
})();
function mainAjax() {
return $.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'
});
}
var promise = mainAjax();
这是我的第二个文件requestMain.js中的代码,
promise.done(function (json) {
var linkBase = "http://www.sciencebase.gov/catalog/item/";
var link = "";
var itemId = "";
var urlId = "";
$.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);
}
testId = json.items[itemId].id;
alert(testId);
}); // END Click event
}).fail(function() {
alert("Ajax call failed!");
});
此网页显示链接列表。链接可能包含我想要在第二个网页上显示的更多信息,或者它可能没有任何内容。因此,当单击链接时,我需要存储/保存/保留链接中的id,以便我可以在url中使用它来发出另一个ajax请求,因为在我获取id之前,下一页的ajax请求将没有想知道要问什么信息。
现在我只是这样做
alert(testId);
但我想要做的就是这个,
$.ajax({
type: 'GET',
url: 'https://www.sciencebase.gov/catalog/itemLink/' + testId + '?format=jsonp',
jsonpCallback: 'getSBJSON',
contentType: "application/json",
dataType: 'jsonp',
// Then doing something with json.something
testId将在url中使用,它将根据在上一页上单击的链接而改变。 ajax调用完全依赖于click事件,并显示在带有新信息的单独网页上。
这将出现在我的第三个文件requestCitation.js中,这个文件在执行时会给我一个很大的未定义
alert(testId);
我认为这是一个范围问题,但我如何存储点击返回的值???那么我可以在全球范围内使用它吗?似乎价值在范围之外消失,好像根本没有点击,甚至认为我将它存储在变量中?
第一页的html包含request.js和requestMain.js的脚本标签,第二页包含request.js和requestCitation.js的脚本标签,因此他们都可以看到变量testId。
感谢您的帮助!
这是jsfiddle
这些是链接,点击链接时
答案 0 :(得分:0)
我不完全确定你要做什么但是如果你试图将从AJAX请求返回的数据保存为全局变量,我会认为它是使用类似于下面的内容完成的。
E.g。
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'
data: '';
success: function(data){
promise = data;
}
});
但正如我所说,我不完全理解所以我的回答可能非常错误。
答案 1 :(得分:0)
你的testId
持有你正在调用的函数重新调整的值,并且由于函数返回了它的参数而你没有参数调用它,它将是undefined
:
var testId = (function (inId) {
var citeId = inId;
return citeId; //returns the argument
})(); // called with no argument