0

我只是不明白,很明显。我试过 setter 和 getter,自调用函数,你说的。就像点击处理程序正在返回一个值,但我没有办法保留它?

这是我在第一个文件 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 调用完全依赖于点击事件,并显示在带有新信息的单独网页上。

这将在我的第三个文件 requestCitation.js 中,目前在执行时给我一个很大的未定义

alert(testId);

我认为这是一个范围问题,但是如何存储单击返回的值???这样我就可以在全球范围内使用它了吗?似乎该值在范围之外消失了,就好像根本没有点击一样,即使我将它存储在变量中?

第一个页面的 html 有 request.js 和 requestMain.js 的脚本标签,第二个页面有 request.js 和 requestCitation.js 的脚本标签,所以他们都可以看到变量 testId。

谢谢您的帮助!

这是jsfiddle

这些是链接以及单击链接时

4

2 回答 2

0

我不完全确定您要做什么,但如果您尝试将从 AJAX 请求返回的数据保留为全局变量,我会认为它是使用类似于下面的内容完成的。

例如

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;
      }
});

但正如我所说,我没有完全理解,所以我的回答可能非常错误。

于 2013-02-24T01:11:23.133 回答
0

testId持有由您正在调用的函数重新调整的值,并且由于该函数返回其参数并且您在没有参数的情况下调用它,它将是undefined

var testId = (function (inId) {
  var citeId  = inId;
  return citeId; //returns the argument
})(); // called with no argument
于 2013-02-24T01:11:23.867 回答