jQuery + JSON + Открыть флэш-диаграмму, как я могу создать диаграмму на лету? - PullRequest
1 голос
/ 02 декабря 2009

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-скрипта, который, в свою очередь, запрашивает данные из внешнего API (большого типа, например, flickr), поэтому может быть задержка в несколько секунд, если результаты в настоящее время не кэшируются нами. Может быть, я поступаю неправильно?

Ответы [ 4 ]

2 голосов
/ 02 декабря 2009

Вы должны поместить 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();
2 голосов
/ 04 декабря 2010

просто наберите $.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"});
  });
});
0 голосов
/ 25 марта 2014

В Javascript объявите переменную flashvars и переменную 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);  

У меня была похожая проблема, и было довольно сложно отладить, что вам нужны обе переменные data и flashvars в обратном вызове успеха. Если эти переменные (или function open_flash_chart_data()) отсутствуют, вы получите ошибку 2032.

0 голосов
/ 02 декабря 2009

Просто предположение, поскольку я не использую Open Flash Chart, но, поскольку вы выполняете асинхронный вызов ajax, ваша функция getMyData на самом деле не возвращает значение json (определенная вами функция обратного вызова).

Попробуйте выполнить предварительную загрузку (может быть, сделать синхронный вызов ajax перед встраиванием swf?) Данных и сохранить их в var, тогда ваша функция getMyData просто вернет эту переменную.

...