我实际上是AJAX的初学者,所以我需要一些帮助。。
我的索引/主页上有一些javascript,可以将一些XML发送到第三方脚本;
<script type="text/javascript">
var myChart = new FusionCharts("/FusionCharts/Radar.swf","myChartId", "784", "500", "0");
myChart.setXMLData("<?php echo $radar_data_string; ?>");
myChart.render("chartContainer");
</script>
变量$radar_data_string
是我在AJAX页面中构建的php字符串。在同一个索引/主页上,我必须调用AJAX请求,如下所示;
<!-- Javascript Call to AJAX file -->
<script>
function showFeedback(str) {
if (str=="") {
document.getElementById("txtHint").innerHTML="";
return;
}
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) {
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","viewFeedback/getFeedback.php?surveyid="+str,true);
xmlhttp.send();
}
</script>
<!-- End Javascript Call to AJAX file -->
上面的代码将surveyid变量传递给getFeedback.php脚本,这就是创建$radar_data_string
的地方。
AJAX请求是在用户选择以下选项之一时发出的;
<select id="survey" name="survey" onChange="showFeedback(this.value);">
<option value=''>- -</option>
<option value='13182|customer1@hotmail.com'>Survey Title 1</option>
<option value='13183|customer1@hotmail.com'>Survey Title 2</option>
</select>
问题是。。。没有加载任何数据。我非常确信我正在创建的$radar_data_string
字符串是正确的,因为当我获得该字符串并将其直接放入myChart.setXMLData时,它会正常工作。
那么,我是误解了AJAX的工作原理(可能),还是我走在了正确的轨道上?
PS-如果你要帮忙,你应该知道我真的不能使用jQuery。很抱歉
您似乎误解了AJAX请求的工作方式(至少从我对您给出的代码的理解来看)。AJAX请求的目的是从服务器请求新数据,而不必重新加载页面的其余部分。
据我所见,您将AJAX请求视为某种通用连接,可以刷新页面中的所有数据。。。它不是这样工作的。
问题
这是一个回调函数,一旦AJAX请求成功,你应该使用这里给出的响应来操作你的页面
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
您似乎正试图直接将PHP变量echo
写入文档,这将无法正常工作,因为在加载页面之前会对PHP进行解释
myChart.setXMLData("<?php echo $radar_data_string; ?>");
解决方案
相反,尝试将您的函数实现到AJAX回调中,现在您可以访问服务器的返回响应
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
myChart.setXMLData(xmlhttp.responseText); //This being the server response...
}