簡體   English   中英

jQuery + JSON +打開flash圖表,如何動態創建圖表?

[英]jQuery + JSON + Open flash chart, how can I create a chart on the fly?

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這樣的大數據庫)請求數據,因此如果我們當前沒有緩存結果,可能會有幾秒鍾的延遲。 也許我會以錯誤的方式解決這個問題?

你必須將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();

只需使用$.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"});
  });
});

只是一個猜測,因為我不使用Open Flash Chart,但由於你正在進行異步ajax調用,你的getMyData函數實際上並沒有返回json值(你定義的回調函數)。

嘗試預加載(可能在swf嵌入之前進行同步ajax調用?)數據並將其存儲在var中,然后讓你的getMyData函數簡單地返回該var。

在Javascript中,declair變量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);  

我遇到了類似的問題,調試成功回調中需要vars dataflashvars是很難的。 如果缺少這些變量(或function open_flash_chart_data() ),您將收到錯誤2032。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM