2011-11-17 69 views
1

可能重複:
Trying to load Google charts through a jQuery ajax call嘗試通過(jQuery的)AJAX調用加載谷歌圖表

我一直在這個整天,不能想辦法讓這個工作。我對jQuery不是很熟悉。

我在做什麼:我正在嘗試編寫一個輪詢函數,用於加載結果並在不刷新的情況下將其顯示在同一頁面中。

到目前爲止,我有這樣的jQuery代碼:

$("#post_yes").click(function(){ 
    $("#result").html(ajax_load); //loads ajaxloader.gif 
    $.post( 
     "query.php", 
     {answer: "yes", poll_id: 5}, 
     function(responseText){ 
      $.getScript(scriptUrl, function(){ 
       $("#result").html(responseText); 
      });    
     }, 
     "html" 
    ); 
}); 

它應該查詢query.php並插入到數據庫中投票。然後我編寫了query.php來返回yes和no值,然後在該頁面上生成一個圖表。這是類似的東西,我有:

google.load('visualization', '1.0', {'packages':['corechart']}); // Load the Visualization API and the piechart package. 
    google.setOnLoadCallback(drawChart); // Set a callback to run when the Google Visualization API is loaded. 

    function drawChart() 
    { 
     // Create the data table. 
     var data = new google.visualization.DataTable(); 
     data.addColumn('string', 'Answers'); 
     data.addColumn('number', 'Number'); 
     data.addRows([ 
      ['Yes', $yes_value], 
      ['No', $no_value], 
     ]); 

     // Set chart options 
     var options = 
     { 
      'title'    :'Do you Like my smile?', 
      'colors'   :['#f25a5a','#5aa5f2'], 
      'fontName'   :'Verdana', 

      'backgroundColor' :'#e7e7e7', 
      'chartArea'   :{left:0,top:10,width:"400",height:"400"}, 
      'is3D'    : true, 
     }; 

     var chart = new google.visualization.PieChart(document.getElementById('chart_div')); 
     chart.draw(data, options);    
    } 

使用Chrome的調試器我注意到,在query.php任何JavaScript並沒有在我原來的網頁運行,這就是爲什麼圖表ISN調試頁面一段時間後沒有被顯示。

我給你的問題大師:有沒有什麼辦法可以顯示來自query.php的圖表。或者有什麼方法可以在用戶投票後顯示圖表(包括用戶提交的數據)? 我還可以採取其他方法嗎?

儘管我對JavaScript/JQuery不太流利,但我可能會遵循任何代碼(甚至僞代碼,任何一點幫助!),你們都可以。

回答

0

默認情況下禁用讓您的按鈕

在js文件

負荷谷歌API, 負載回調啓用按鈕

// Set a callback to run when the Google Visualization API is loaded.  
google.setOnLoadCallback(function(){ $("#post_yes").removeAttr('disabled'); }); 

招drawChart功能,以您的js文件,添加參數「行「

function drawChart(rows) { 
    ... 
    data.addRows(rows); 
    ... 
} 

php文件生成所需的行內並返回它們(作爲有效的JSON)

上BTN點擊發表您的數據,成功回調調用drawChart功能,並通過返回的行給它

$.post(
    "query.php", 
    {answer: "yes", poll_id: 5}, 
    function(response){ 
    drawChart(response); 
    } 
); 


或者如果你不想禁用成功後第一次加載按鈕就可以谷歌API和加載回調調用drawChart與傳遞的響應//function(){drawChart(response); }

+0

我不確定你的意思是「將drawChart函數移到你的js文件中」,我正在從Google的服務器調用js。我已經把drawChart()函數放在一個單獨的drawChart.js文件中,並完成了其餘的修改。我仍然沒有看到任何事情發生。 這是我的代碼在我的主頁:http://pastebin.com/x6JU5DPF 在我的drawchart.js文件中,我有這個:http://pastebin.com/KMhnM8pX 而我的PHP文件,我甚至不詢問數據庫,我只是吐出示例數據,看看它是否有效。這裏是文件:http://pastebin.com/1EWMg6FM 編輯:上面的json是有效的根據jsonlint.com – Xecure

+0

如果你直接調用drawChart({「yes」:14,「no」:9})函數,沒有Ajax電話 - 你能看到圖表嗎?例如點擊(函數(){drawChart({「yes」:14,「no」:9});}); _ – Irishka

+0

data.addRows function google from api expect a multidimensional array,so你需要像[[「yes」,14],[「no」,9]]那樣按照你以前的格式傳遞它 – Irishka