2017-06-14 39 views
0

我已經搜索並嘗試了幾個小時但未成功。無法通過jQuery訪問AJAX響應數據

我有一個現有的頁面,它使用PHP在HTML表格中顯示來自數據庫的簡單數據。現在我想實現AJAX功能,以便在不刷新頁面的情況下刷新數據。

我已經實現了this solution,據我的理解,AJAX調用部分正在工作,並且按照預期刷新值。但我堅持獲取價值觀。

的index.php(主頁)

<html> 
<head> 
<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"> 
</script> 
</head> 
<body> 
<h3>Output: </h3> 

<table border="1" id="output"></table> 

<script id="source" language="javascript" type="text/javascript"> 
$(function() { 
    update_content(); 
}); 

    function update_content() 
    { 
    $.ajax({          
     url: 'query.php',     //the script to call to get data   
     data: "",      //you can insert url argumnets here to pass to query.php 
     dataType: 'json',    //data format  
     success: function(data)   //on recieve of reply 
     { 
     if(data){  
     (data + '').length; 
    } 
    var temp = new Array(); 
     $('#output').html("<tr><td>"+data["symbol"]+"</td></tr>"); 
     } 
    }); 
    setTimeout(function(){ 
      update_content(); 
     }, 1000); 
    } 
</script> 
</body> 
</html> 

query.php(用於AJAX調用)

<?php 
include('inc/connection.php'); 

# Main query 
$sql = " 
select LastUpdated, symbol, sum 
from TheTable 
"; 

$result = mysql_query($sql); 

while($row = mysql_fetch_row($result)){ 
$table_data[]=array("LastUpdated"=>$row[0],"symbol"=>$row[1],"sum"=>$row[2]); 
} 
echo json_encode($table_data); 
?> 

如果我在瀏覽器中運行query.php直接,我看到所有數據在此格式中:[{"LastUpdated":"20170614","symbol":"AUD","sum":"20"},{"LastUpdated":"20170614","symbol":"AUD","sum":"10"}]

但是在我的主頁上,我在表格內看到undefined。 理想情況下,我希望擁有所有值(在上面的代碼中使用JS循環),以顯示從DB中獲取的所有記錄(記錄的變量編號)。

提示/修改
當我改變:
$('#output').html("<tr><td>"+data["symbol"]+"</td></tr>");

$('#output').html("<tr><td>"+data[0]+"</td></tr>");
的index.php中



$table_data[]=array("LastUpdated"=>$row[0],"symbol"=>$row[1],"sum"=>$row[2]);

$table_data[]=$row;
在query.php,

然後我得到只有第一行像一個字符串,如 20170614,AUD,40
END提示/修改

我很抱歉,如果這是一個愚蠢的問題/問題。我是jQuery的新手,並且第一次嘗試AJAX。

P.S.我知道mysql_ *函數已被棄用,我知道這個漏洞。

您的幫助將不勝感激。

+1

提示:你的響應是一個對象數組不是一個對象。 – Mikey

+0

您正在傳遞'dataType:'json''選項,然後在ajax的'success'選項中,您應該使用響應(此處爲數據)作爲對象。但是你把它當作一個字符串來對待。 –

+0

如果(數據){數據+'').length; }' - 什麼都不做 –

回答

2

當您更新數據表時,您可能只想重建表格。在你的回調函數中,你需要遍歷數組並向表中添加新行。

$.ajax({ 
    url: 'query.php', //the script to call to get data   
    dataType: 'json', //data format  
    success: function(data) { 
     if (!Array.isArray(data) || !data.length) { 
      return; 
     } 

     $("#output").empty(); //clear old table data 
     for(var i = 0, len = data.length; i < len; i++) { 

     $("#output").append(
      "<tr><td>" + data[i].LastUpdated + "</td>" + 
      "<td>" + data[i].symbol + "</td></tr>" + 
      "<td>" + data[i].sum + "</td></tr>" 
     ); 
     } 
    } 
}); 
+0

這個完美的作品。儘管最後一件事是,當我這樣寫時,它將所有內容顯示在一行中:for(var i = 0,len = data.length; i 」); $(「#output」)。append(「​​」+ data [i] .LastUpdated +「」); $(「#output」)。append(「​​」+ data [i] .symbol +「」); $(「#output」)。append(「​​」+ data [i] .sum +「」); $(「#output」)。append(「」); }' –

+1

'append'不起作用,就像你只是添加字符串一樣。 '$(「#output」)。append(「」)'將添加完整的元素(包含關閉標籤);在將它們放在「」以外的地方後,添加「​​」。我會在我的答案中添加另一行代碼,告訴你該怎麼做。 –

+0

完美。我得到了我想要的東西。非常感謝。 –

0

您必須更改代碼,如下所述。

data["symbol"] 

data.symbol 

讓我知道,如果它不工作。

+3

這些都是[都在JavaScript中同樣的東西](https://stackoverflow.com/a/4968448/1022914)。 'data'是一個數組而不是對象。 – Mikey

+0

我以前就已經試過了,不行。 –