来自PHP的最新XML文件响应未在Javascript中加载

时间:2015-07-15 14:10:58

标签: javascript php ajax xml

我试图在谷歌图表的帮助下可视化一些数据。我使用AJAX-PHP调用从服务器检索数据。编码PHP文件以编写XML文件,然后将其解析并作为数据传递到谷歌图表。我面临的问题是,图表没有刷新,但服务器中的XML文件每次运行都会刷新。但是如果我使用调试器,一切都如预期的那样。我知道这是由于asynchronus调用,但我无法解决它。即使我尝试使用async = false但没有用。

按下提取按钮时,将调用以下函数:

function callforXML(FrDate, ToDate)
{
ajax_page = 'RetrieveData.php';
$.ajax({
type: "GET",
url: ajax_page,
cache: false,
dataType: "text/html",
data: "fdate=" + FrDate + "&tdate=" + ToDate,
success: loadXMLDocintoArray,       
error: function(e)
{
alert("Connection to server is interrupted!");
}
});
}

function loadXMLDocintoArray()
{
var xmlhttp;
var x,xx,i;
var ondateXML, swiftXML, manualXML;


var appName = $("#applicationName :selected").text();
var selInterval = $("#interval :selected").text();

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}


xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{           
x=xmlhttp.responseXML.documentElement.getElementsByTagName("tcount");
var data = new google.visualization.DataTable();

// Declare columns
data.addColumn('string', 'Ticket Date');
data.addColumn('number', 'Swift');
data.addColumn('number', 'Manual');
for (i=0;i<x.length;i++)
{                               
xx=x[i].getElementsByTagName("ondate");
ondateXML = xx[0].firstChild.nodeValue;

xx=x[i].getElementsByTagName("scount");
swiftXML = xx[0].firstChild.nodeValue;

xx=x[i].getElementsByTagName("mcount");
manualXML = xx[0].firstChild.nodeValue;

data.addRows([[ondateXML,parseInt(swiftXML),parseInt(manualXML)]]);
}
var options = {
title: selInterval + ' Report for ' + appName,
width: 700,
height: 1200,
legend: { position: 'none' },
chart: { title: selInterval + ' Report for ' + appName,
subtitle: ' ' },
bars: 'vertical', // Required for Material Bar Charts.
axes: {
x: {
0: { side: 'top', label: ' '} }
},
bar: { groupWidth: "90%" },
animation:{
duration: 1000,
easing: 'out'}
};

var chart = new google.charts.Bar(document.getElementById('Chart_Div'));
chart.draw(data, options);                      
}
}

xmlhttp.open("GET","/XML/TicketCount.xml",false);
xmlhttp.send();
}

1 个答案:

答案 0 :(得分:0)

success回调函数传递来自ajax调用的返回数据,你不会传递它。

你可能想要更像

的东西
success: function(xml) { loadXMLDocIntoArray(xml); }
function loadXMLDocIntoArray(xml) {
   ... do stuff with 'xml' argument
}