我们在用JQuery的Ajax从后台提取数据后想把它赋值给全局变量,但是却怎么都赋不进,为什么呢? 原因其实很简单,我们用的Ajax是异步操作,也就是说在你赋值的时候数据还没提取出来,你当然赋不进去,所以只要改成同步操作就行~ 方法1:先设置同步在进行Ajax操作 //在全局或某个需要的函数内设置Ajax异步为false,也就是同步 $.ajaxSetup({ async :false}); //然后再进行你的Ajax操作 $.post(地址,参数,function(data,…
February 24, 2022
Javascript/JQuery Ajax 下载文件, 通过jQuery.Ajax下载文件, jquery $.get download csv, Download CSV file through ajax post

我只是想在这里为将来的人们添加一些代码,因为我试图将 JSON 导出到 CSV 文档并下载它。
我个人用 $.get
$.get('{{ url('/newsletter/download') }}', $formdata, function(data) { // console.log(data); var items = jQuery.parseJSON(data); const replacer = (key, value) => value === null ? '' : value; // specify how you want to handle null values here const header = Object.keys(items[0]); let csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(',')); csv.unshift(header.join(',')); csv = csv.join('\r\n'); //Download the file as CSV var downloadLink = document.createElement("a"); var blob = new Blob(["\ufeff", csv]); var url = URL.createObjectURL(blob); downloadLink.href = url; downloadLink.download = "Recipients.csv"; //Name the file here document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); })
/newsletter/download
return json_encode($php_array);
上面的代码是下面代码的变体,只是多加了一句
var items = jQuery.parseJSON(data);
我曾经$.getJSON
从外部页面提取 json 数据,但如果你有一个基本数组,你可以使用它。
这使用代码来创建 csv 数据。
$(document).ready(function() { var JSONData = $.getJSON("GetJsonData.php", function(data) { var items = data; const replacer = (key, value) => value === null ? '' : value; // specify how you want to handle null values here const header = Object.keys(items[0]); let csv = items.map(row => header.map(fieldName => JSON.stringify(row[fieldName], replacer)).join(',')); csv.unshift(header.join(',')); csv = csv.join('\r\n'); //Download the file as CSV var downloadLink = document.createElement("a"); var blob = new Blob(["\ufeff", csv]); var url = URL.createObjectURL(blob); downloadLink.href = url; downloadLink.download = "DataDump.csv"; //Name the file here document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); }); });
编辑:值得注意的是,JSON.stringify
将通过添加\"
. 如果您在 excel 中查看 CSV,它不喜欢将其作为转义字符。
您可以添加.replace(/\\"/g, '""')
到末尾JSON.stringify(row[fieldName], replacer)
以在 excel 中正确显示(这将替换\"
为""
excel 喜欢的内容)。
全线:let csv = items.map(row => header.map(fieldName => (JSON.stringify(row[fieldName], replacer).replace(/\\"/g, '""'))).join(','));
更多参考:https://stackoverflow.com/questions/8847766/how-to-convert-json-to-csv-format-and-store-in-a-variable