2012-04-20 91 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求助