2014-02-14 34 views
0

我想从另一个页面通过$.get获取数据,但我无法读取函数外的值。这里是我的代码:使用jQuery从其他页面获取数据

$.get('data.php?<?php echo ($params); ?>', null, function(tsv) { 
     var lines = []; 
     traffic = []; 
     try { 
      // split the data return into lines and parse them 
      tsv = tsv.split(/\n/g); 
      jQuery.each(tsv, function(i, line) { 
       line = line.split(/\t/); 
       date = Date.parse(line[0] +' UTC'); 
       traffic.push([ 
        date, 
        parseFloat(line[1].replace(',', ''), 10) 
       ]); 
      }); 
     } catch (e) { } 
     options.series[0].data = traffic;; 
    });alert(JSON.stringify(options.series[0].data, null, 4)); 

的问题是,options.series[0].data显示为空,但如果我把警报功能TSV内,那么就说明它的罚款。

代码中出了什么问题?

+0

看来你声明'traffic'作为一个全局变量:'流量= [];功能范围之外定义'你有没有任何其他变量名为'traffic'? –

+0

http://api.jquery.com/load/ – shubniggurath

+1

AJAX是异步的,您可能会在结果返回之前发出警报。看到这篇文章的更多细节 - http://stackoverflow.com/questions/13966223/how-can-ajax-do-asynchronous-request-and-response-a-synchronous-result –

回答

0

当您使用$.get$.ajax时,您将放回一个callBack函数。您获得的数据是“get”,您将传递给变量tsv中的函数。该变量仅在函数内可见。但是,由于$.get是异步方法,因此alert的行在您获取数据之前正在执行。

要从外部使用检索到的数据,必须将其放入全局变量,使用数据或sessionStorage。这完全取决于你想要做的用途。

你可以这样做:

var myOptions="";  
$.get('data.php?<?php echo ($params); ?>', null, function(tsv) { 
    .... 
    options.series[0].data = traffic; 
    myOptions=options; 
    myStuff(); 
}); 

function myStuff(){ 
    if (myOptions!=="") //chek if has been set 
     alert(JSON.stringify(myOptions.series[0].data, null, 4)); 
} 
+0

不工作,只是测试它:( – user2040597