我发现我不能将php与javascript混合,所以我尝试了AJAX。在下面的代码中,我希望ajax函数从getcount.php页面获取一个值并将其返回给调用函数。下面的代码不起作用。错误在哪里?
<script type="text/javascript">
function getcount(day)
{
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","getcount.php?"+day,true);
xmlhttp.send();
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
return xmlhttp.responseText;
}
}
</script>
<script type="text/javascript">
$(function () {
var previousPoint;
var d1 = [];
for (var i = 0; i <= 10; i += 1)
d1.push([i, getcount(i)]);
.
.
.
答案 0 :(得分:3)
ajax回调将是异步的,所以getcount()将返回undefined,当回调返回时,它不会被分配给任何东西
function getcount(day, arr) {
var xmlhttp;
...
xmlhttp.send();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
arr.push([day, xmlhttp.responseText]);
}
}
$(function () {
var previousPoint;
var d1 = [];
for (var i = 0; i <= 10; i += 1)
getcount(i, d1);
...
答案 1 :(得分:1)
使用jQuery,它会容易得多:
<script type="text/javascript">
$(function () {
var previousPoint, d1 = [];
var getCount = function(day){
$.get("getcount.php?"+day, function(data){
d1.push([day, data]);
});
}
for (var i = 0; i <= 10; i += 1)
getcount(i)
});
</script>
答案 2 :(得分:1)
将任何类型的Ajax查询与这种性质的循环混合不是一个好主意。它将创建一些有趣的竞争条件,因为Ajax请求是异步的 - 如前所述。
最好做一个ajax请求并在php中处理循环 - 然后返回一个数组。但是,重要的是,默认情况下您需要理解它的重要性,其余的过程javascript代码将不会等待Ajax方法返回。
请参阅docs寻求帮助
答案 3 :(得分:0)
Try using Jquery ajax which is very easier for maintenance and debugging. Here is a sample
ajax code
$.ajax({
type: 'POST', // can be get also
url: 'yourpage.php', // change name
data: id, // some data if u need to pass
success: function(data) { // returns date
$('.result').html(data); // result
}
});
For details http://api.jquery.com/jQuery.ajax/
Thanks.