-1

以下の私の方法よりも JavaScript を使用して .CSV ファイルを作成するためのより良い方法をお勧めできますか? ここで以前のスレッドを検索した後に見つけた最良の方法でした。以下に示すように、データ配列に行のロードとロードを追加し始めるまで、すべてはほとんど問題ありませんでした。

var data = 
[
  ["Thermal Store Summary:"] + "\n",
  ["Cylinder:", "", cylinder, "", cylinder2] + "\n",
  ["Heat Exchanger:", "", heatex, "", heatex2] + "\n",
  ["Immersion Heaters:", "", heater, "", heater2] + "\n", 

  **// About 30 or so entries with no problem, didn't work with any more **
];

以下は、選択メニュー オプションの ID と値が格納される変数です。

var cylinder = document.getElementById("heatex").options[document.getElementById("heatex").selectedIndex].id;
var heatex = document.getElementById("heatex").options[document.getElementById("heatex").selectedIndex].id;
var heater = document.getElementById("heater").options[document.getElementById("heater").selectedIndex].id;
var cylinder2 = document.getElementById("cylinder").options[document.getElementById("cylinder").selectedIndex].value;
var heatex2 = document.getElementById("heatex").options[document.getElementById("heatex").selectedIndex].value
var heater2 = document.getElementById("heater").options[document.getElementById("heater").selectedIndex].value

そして、現在 .CSV ファイルを作成するコードは次のとおりです。

var csvContent = "data:text/csv;charset=utf-8,";
data.forEach
(
  function(infoArray, index)
  {
    dataString = infoArray;
    csvContent += index < infoArray.length ? dataString+ "" : dataString;
  }
); 

encodedUri = encodeURI(csvContent);

ダウンロード自体は最後に自動ダウンロードさせていたのですが、30件以上追加しようとすると停止してしまいました。コードを別の関数 (ボタンで呼び出される) に移動し、「ファイルがない」ために失敗するダウンロードを強制しました。

function download_csv()
  {
    var link = document.createElement("a");
    link.setAttribute("href", encodedUri);
    link.setAttribute("download", "quote.csv");
    link.click();
  }

理想的には私の現在のソリューションの修正であるだけでなく、新しい方法を一緒に試してみることもできます。

4

1 に答える 1

1

URL にはブラウザごとに異なる最大長があり、これはdata:スタイル リクエストで処理できるリクエストのサイズに適用されます。

面倒ですが簡単に適用できる修正方法の 1 つは、コンテンツを POST データとしてサーバーに渡し、それを非常に単純な方法で返すことecho $_POST['csvData'];です。

于 2013-10-28T10:42:30.520 に答える