以下代码效果很好。我是ajax的新手。 需要在第6行将变量json3等网址调用的输出分配给“http://test.com/test.php”。 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>
感谢您的帮助
答案 0 :(得分:1)
你可以尝试一下,
<script type="text/javascript">
var xmlhttp;
var txt,x,i,json3;
if (window.XMLHttpRequest)
{
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
json3 = eval(xmlhttp.responseText);
DownloadJSON2CSV(json3["inp1:val1"].data);
}
xmlhttp.open("GET","http://test.com/test.php",true);
xmlhttp.send();
}
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>
让我知道。
答案 1 :(得分:0)
我认为这更像是一种设计决策,而不是实现这一目标的方法。
如果数据在加载时在页面上存在,并且如果您有动态后端,则可以查询(某些后端语言)格式化并返回页面的HTML),在加载页面时立即填充该变量是明智的。
如果您需要真正查询该数据,并且在加载页面时应该使用它完成某些操作,请在页面初始化时通过在HTML开头插入ajax调用来强制执行ajax调用(加载任何库之后以及有脚本标记的意义。初始化变量( json3 )将在调用之前在全局上下文中可用
如果某事发生在之后为变量赋值,则采用异步回调,该调用将在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调用的异步性质(确切地说是 A),否则你不知道变量何时被赋值。 代表Ajax)。
建议使用jQuery(或任何其他库)来使您的生活更轻松,这一点也很重要,如果您还没有使用过。