0

以下のコードはうまく機能します。私はajaxが初めてです。「 http://test.com/test.php」のような URL 呼び出しの出力を 6 行目の変数 json3に割り当てる必要があります。URL 呼び出しの出力は { "inp1:val1": { "data ": [ [ 1378267200000, 0.0743 ], [ 1378270800000, 0.1787 ] }}

現在、私はこの var json3 = { "inp1:val1": { "data": [ [ 1378267200000, 0.0743 ], [ 1378270800000, 0.1787 ] ] }} のようにハードコーディングしています。

 <html>
    <head>
    <title>JSON to CSV</title>
    <script src="json.js" type="text/javascript"></script>
    <script type="text/javascript">

    var json3 = { "inp1:val1": { "data": [ [ 1378267200000, 0.0743 ], [ 1378270800000, 0.1787 ] ] }}
    DownloadJSON2CSV(json3["inp1:val1"].data);

    function DownloadJSON2CSV(objArray)
    {
        var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;

        var str = '';

        for (var i = 0; i < array.length; i++) {
            var line = '';

            for (var index in array[i]) {
                line += array[i][index] + ',';
            }

            line.slice(0,line.Length-1); 

            str += line + '\r\n';
        }
        window.open( "data:text/csv;charset=utf-8," + escape(str))
    }

    </script>

   </head>
   <body>
    <h1>This page downloads csv....</h1>
</body>
</html>

ご協力いただきありがとうございます

4

2 に答える 2

0

これは、これを実現するための方法ではなく、設計上の決定であると考えています。

  1. データがロードされたときにページに存在するはずであり、クエリを実行できる動的なバックエンド (ページの HTML をフォーマットして返すバックエンド言語) があれば、それが賢明です。ページが読み込まれるとすぐにその変数が入力されるようにします。

  2. そのデータを実際にクエリする必要があり、ページがロードされたときに何かを行う必要がある場合は、HTML の先頭に ajax 呼び出しを挿入して、ページの初期化時に ajax 呼び出しを強制します (ライブラリがロードされた後)。スクリプトタグを持つことが理にかなっている場合. 呼び出しが行われる前に、グローバルコンテキストで利用可能になる変数 ( json3 ) を初期化します.

  3. 変数に値が割り当てられた後に何かが起こると思われる場合は、ajax 呼び出しが終了したときに呼び出される非同期コールバックを採用します。

     function doAjaxCall(callback) {
         //your ajax call here
    
         //and within your ajax success/failure handler:
             callback(value);
     }
    
     //your callback function
     function myCallback(value) {
         //do something with value here, such as
         alert(value);
     }
    
     //and invoke it with
     doAjaxCall(myCallback);
    

私の提案の主なポイントは、Ajax 呼び出しの非同期の性質 (正確には Ajax でのA の意味)に対処できない限り、変数にいつ値が代入されるかがわからないという事実を受け入れることです。

jQuery (またはその他のライブラリ) をまだ使用していない場合は、生活を楽にするために使用を提案することも重要です。

于 2013-09-15T15:58:18.203 に答える