jQuery + JSON +打开flash图表,如何动态创建图表?

时间:2009-12-01 21:33:57

标签: php javascript jquery open-flash-chart

JS

SWFlocation = "open-flash-chart.swf";
getMyData = function()
{
    $.post(
        myJsURL, 
        {
            passedval: 1234
        }, 
        function (returned_json) {
            return returned_json;

        },
        "json"
    ); 
}
swfobject.embedSWF(SWFlocation, "myChartDiv", "650", "200", "9.0.0", "", {"get-data":"getMyData"} );

使用firebug,如果我硬编码返回的JSON,图表工作正常。但是,当我按上述方式请求数据时 - 即在页面加载后,我收到了2032错误。

getMyData方法实际上从PHP脚本请求数据,而PHP脚本又从请求数据和外部API(像flickr这样的大数据库)请求数据,因此如果我们当前没有缓存结果,可能会有几秒钟的延迟。也许我的方式错了?

4 个答案:

答案 0 :(得分:2)

你必须将swfobject.embedSWF()放入ajax回调中。

像这样:

SWFlocation = "open-flash-chart.swf";
init_chart = function()
{
    $.post(
        myJsURL, 
        {
                passedval: 1234
        }, 
        function (returned_json) {
                swfobject.embedSWF(SWFlocation, "myChartDiv", "650", "200", "9.0.0", "", {"get-data":returned_json} );    
        },
        "json"
    ); 
}
init_chart();

答案 1 :(得分:2)

在致电$.ajaxSetup({async : false});

之前使用$.post();

例如

function ajaxchart() {
  $.ajaxSetup({async : false});
  var chart = '';
  var url = "data.php";
  var data = '';
  var callback = function(resp) {
    chart = resp;
  };
  $.post(url, data, callback, 'text');
  return chart;
}
$(function() {
  $("#test").click(function() {
    swfobject.embedSWF("open-flash-chart.swf", "my_chart", "350", "200", "9.0.0", "expressInstall.swf", {"get-data":"ajaxchart"});
  });
});

答案 2 :(得分:0)

只是猜测,因为我不使用Open Flash Chart但是因为你正在进行异步ajax调用,你的getMyData函数实际上并没有返回json值(你定义的回调函数)。

尝试预加载(可能在swf嵌入之前进行同步ajax调用?)数据并将其存储在var中,然后让你的getMyData函数只返回var。

答案 3 :(得分:0)

在Javascript中,声明变量flashvars和var data,如下所示:

var flashvars = {};
var data;

另外,请确保您具有此功能,该功能由swfobject.embedSWF自动调用:

 function open_flash_chart_data(){
     return JSON.stringify(data);
     }

现在转到你的AJAX函数并改变你的AJAX-Success-call:

success: function(returned_json){
      // we need to set both
      // data and flashvars.ofc
      data=returned_json;
      flashvars.ofc = returned_json;
      swfobject.embedSWF(SWFlocation, "myChartDiv", "650", "200", "9.0.0", "",flashvars);  

我遇到了类似的问题,并且很难调试成功回调中需要变量dataflashvars。如果缺少这些变量(或function open_flash_chart_data()),您将收到错误2032.