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

Php jQuery+;JSON+;打开flash chart,如何动态创建图表?,php,javascript,jquery,open-flash-chart,Php,Javascript,Jquery,Open Flash Chart,JS 使用firebug,如果我对返回的JSON进行硬编码,图表就可以正常工作。但是,当我像上面那样请求数据时,即在页面加载之后,我得到一个2032错误 getMyData方法实际上是从PHP脚本请求数据,而PHP脚本又从外部API(像flickr这样的大型API)请求数据,因此如果我们当前没有缓存结果,可能会有几秒钟的延迟。可能是我弄错了?只是一个猜测,因为我不使用Open Flash Chart,但由于您正在进行异步ajax调用,因此getMyData函数实际上没有返回json值(您定义的回

JS

使用firebug,如果我对返回的JSON进行硬编码,图表就可以正常工作。但是,当我像上面那样请求数据时,即在页面加载之后,我得到一个2032错误


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

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


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

只是一个猜测,因为我不使用Open Flash Chart,但由于进行异步ajax调用,因此getMyData函数实际上并没有返回json值(您定义的回调函数为)


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

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

像这样:

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"} );
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"});
  });
});
 function open_flash_chart_data(){
     return JSON.stringify(data);
     }

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

像这样:

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"} );
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"});
  });
});
 function open_flash_chart_data(){
     return JSON.stringify(data);
     }
调用
$.post();

范例

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();
调用
$.post();

范例

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();

在Javascript中,像这样声明变量
flashvars
和变量
data

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"} );
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"});
  });
});
 function open_flash_chart_data(){
     return JSON.stringify(data);
     }
另外,请确保您拥有此函数,该函数由swfobject.embedSWF自动调用:

var flashvars = {};
var data;
现在转到AJAX函数并更改AJAX成功调用,如下所示:

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"} );
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"});
  });
});
 function open_flash_chart_data(){
     return JSON.stringify(data);
     }

我遇到了一个类似的问题,很难调试成功回调中同时需要变量
data
flashvars
。如果这些变量(或
函数打开\u flash\u chart\u data()
)如果缺少,您将得到错误2032。

在Javascript中,声明变量
flashvars
和变量
数据如下:

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"} );
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"});
  });
});
 function open_flash_chart_data(){
     return JSON.stringify(data);
     }
另外,请确保您拥有此函数,该函数由swfobject.embedSWF自动调用:

var flashvars = {};
var data;
现在转到AJAX函数并更改AJAX成功调用,如下所示:

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"} );
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"});
  });
});
 function open_flash_chart_data(){
     return JSON.stringify(data);
     }
我有一个类似的问题,很难调试成功回调中同时需要变量
data
flashvars
。如果缺少这些变量(或
function open\u flash\u chart\u data()
),则会出现错误2032