1

私は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>

ここで、できればJSTLを使用して、2次元配列「datatable」をHTMLテーブルに出力したいと考えています。しかし、「datatable」変数には外部からアクセスできないようです。テーブルが正しく設定されていることはわかってい$('#myTestDiv').text(datatable[2][0]);ます。予想される出力が出力されています。

これを達成する方法は?

どうもありがとう。

4

4 に答える 4

2

var変数宣言の前から削除します。これにより、変数がグローバルwindowオブジェクトに配置され、どこからでもアクセスできるようになります。ただし、グローバル コンテキストを汚染することは嫌われているため、この種の慣行には注意してください。

于 2012-05-01T03:59:05.773 に答える
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);

            },
于 2012-05-01T04:12:01.747 に答える
0

JSTL でdatatable変数にアクセスできるとは思いません。JSTL の役割またはアクションはサーバー側にありますが、データテーブルはクライアント側の JavaScript 変数です。あなたが試すことができるのは、このデータテーブル値を非表示のBeanプロパティに割り当てて$('elementId').val(datatable)から、サーバーへのさらなるリクエストでサーバー側でアクセスすることです

于 2012-05-01T04:12:26.770 に答える
0

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

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

アップデート

        $(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!');
                }
            })
        });
于 2012-05-01T03:59:28.377 に答える