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

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>

让我知道。

于 2013-09-15T15:42:15.987 回答
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 调用的异步性质(正是A在 Ajax 中的含义),否则您将不知道何时为变量赋值。

如果您还没有使用任何jQuery(或任何其他库),那么建议使用jQuery (或任何其他库)让您的生活更轻松也很重要。

于 2013-09-15T15:58:18.203 回答