将URL输出分配给javascript中的变量

时间:2013-09-15 15:29:18

标签: javascript html

以下代码效果很好。我是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>

感谢您的帮助

2 个答案:

答案 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)

我认为这更像是一种设计决策,而不是实现这一目标的方法。

  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);
    
  4. 我的建议的主要观点是接受这样一个事实:除非你能够处理Ajax调用的异步性质(确切地说是 A),否则你不知道变量何时被赋值。 代表Ajax)。

    建议使用jQuery(或任何其他库)来使您的生活更轻松,这一点也很重要,如果您还没有使用过。