2012-04-20 92 views
0

我发现我无法将php与javascript混合使用,因此我尝试了AJAX。在下面的代码中,我希望ajax函数从getcount.php页面获取一个值并将其返回给调用者函数。下面的代码不起作用。错误在哪里?将Javascript与Javascript混合使用

<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)]); 
    . 
    . 
    . 
+1

你的标题有点怪:AJAX是使用Javascript – fmgp 2012-04-20 18:41:47

+0

你缺少一个右}在getCount将函数的结束。尽量保持一致的代码缩进,那么这种事情很快就会明显:) – Armatus 2012-04-20 18:44:56

+0

我加了一个}但是... – 2012-04-20 18:50:59

回答

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

使用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> 
+0

这并不回答他的问题,只是感觉像一个无耻的插件。 :[ – Snuffleupagus 2012-04-20 18:50:14

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. 
1

混合任何类型的Ajax查询与这种性质的循环是不是一个好主意。如前所述,它会创建一些有趣的竞争条件,因为Ajax请求是异步的。

这将是更好的做一个单一的Ajax请求,并在PHP中处理循环 - 然后返回一个单一的数组。然而,重要的是,您需要默认了解其余的程序化JavaScript代码,不会等待Ajax方法返回。

docs求助