2012-05-01 4 views
1

私はjqueryの絶対的な初心者です。だから、これは非常に基本的な質問かもしれない、私に耐えてください。スクリプト外のjQuery変数にアクセスするには?

2次元配列を作成するjQuery関数を定義しました。

<script type="text/javascript"> 
     $(document).ready(function() { 
      $.ajax({ 
       url: '/testdata.txt', 
       dataType: 'text', 
       success: function(data) { 
        var datatable = []; 
          // Populate datatable[]. This is a 2-d array. 
          $('#myTestDiv').text(datatable[2][0]); 
         }, 
         error: function(){ 
          alert('error!'); 
         } 
        }) 
       }); 
    </script> 

<body> 
    <table> 
     <thead> 
     </thead> 
    </table> 
</body> 

ここで、2次元配列 "datatable"をHTMLテーブルに、好ましくはJSTLで印刷したいとします。しかし、 "datatable"変数は外部からアクセスできないようです。私はテーブルが正しく入力されていることを知っています。$('#myTestDiv').text(datatable[2][0]);は期待される出力を出力しています。

これを行うには?

ありがとうございます。

答えて

2

変数宣言の前からvarを削除します。これにより、グローバル変数windowオブジェクトに変数が配置され、すべてからアクセスできるようになります。あなたのグローバルな文脈を汚染することはぶつかるので、このタイプの練習には注意してください。

+0

感謝を$('elementId').val(datatable)に隠されたBeanのプロパティにこのデータテーブル値を代入して、サーバーへの更なる要求で、サーバー側でそれにアクセスされて試すことができます。私は 'var'を削除しようとしましたが、出力は変更されませんでした。 – Bhushan

+0

その変数にどのようにアクセスしようとしているかを教えてください。あなたはajaxリクエストの成功メソッドが実行される前にアクセスしようとしていませんか?それまで存在しない。 – Sampson

0

datatable変数を.ajax()関数の外に宣言して、コードの他の部分に表示されるようにすることをお勧めします。

正しく入力されていることがわかっている場合は、スコープの問題です。

UPDATE

 $(document).ready(function() { 
      var datatable = []; 
      $.ajax({ 
       url: '/testdata.txt', 
       dataType: 'text', 
       success: function(data) { 
        var lines = data.split('\n'); 
        $.each(lines, function(i, val) { 
         datatable[i] = []; 
        }); 
        $.each(lines, function(j, val) { 
         datatable[j] = lines[j].split(','); 
        }); 
        $('#myTestDiv').text(datatable[2][1]); 
       }, 
       error: function(){ 
        alert('error!'); 
       } 
      }) 
     }); 
+0

速い返答をありがとう。 'あなたはdatatable変数を.ajax()関数の外に宣言する必要があります.'変数をどこに宣言すべきですか?任意のjQuery関数の外で、タグの範囲内、またはすべての範囲外? – Bhushan

+0

スクリプトタグの外に置くとJavaScriptですか? – epascarello

+0

私の解答を更新しました。 – RET

0

あなたはそれがどこでも利用可能ですのでdatatableはグローバル変数で作ることができますが、それは通常、あなたのコードの残りの部分は時に認識していないので、本当に正しい実装を作るものではありませんデータはその変数にあります。 ajax関数は非同期であるため、ajax関数の実行後にデータがdatatableにあるとみなすことはできません。実際、成功ハンドラが呼び出されるまでは実際には使用できません。

代わりに、典型的な実装では、成功関数から関数を呼び出し、それに引数としてdatatable変数を渡します。これは、(非同期ajax呼び出しの)タイミングとデータ問題の可用性(関数の引数として渡される)の両方の問題を解決します。それは次のようになります。

  success: function(data) { 
       var datatable = []; 
       // Populate datatable[]. This is a 2-d array. 
       // call function to process the data 
       processData(datatable); 

      }, 
0

私はあなたがJSTLでデータテーブル変数にアクセスできることを考えてはいけません。 JSTLの役割またはアクションはサーバ側にありますが、データテーブルはクライアント側のjavascript変数です。 あなたは、高速な応答を

関連する問題