0

わかりません、明らかに。セッターとゲッター、自己呼び出し関数などを試しました。クリック ハンドラーが値を返しているようですが、それを保持する方法はありませんか?

これは、最初のファイル 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();

これは私の 2 番目のファイル 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!");
});

この Web ページには、リンクのリストが表示されます。リンクには、2 番目の Web ページに表示したい情報が含まれている場合と、何も含まれていない場合があります。したがって、リンクがクリックされたときに、リンクから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 呼び出しはクリック イベントに完全に依存しており、別の Web ページに新しい情報が表示されます。

そして、これは私の3番目のファイルrequestCitation.jsにあります。

alert(testId);

これはスコープの問題だと思いますが、クリックから返された値をどのように保存できますか??? それをグローバルに使用できるようにするには?変数に格納しているとはいえ、クリックがまったくなかったかのように、値がスコープの外に消えるように見えますか?

最初のページの html には request.js と requestMain.js のスクリプト タグがあり、2 番目のページには 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 に答える