2012-03-14 53 views
0

我找回這樣從我的數據庫中的數據:傳遞一個PHP字符串到JavaScript變量與阿賈克斯

while($row = mysql_fetch_array($result)) 
{ 
    echo $row['uid']; 
    echo $row['note']; 
} 

,我和阿賈克斯打印這樣:

xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      console.log(xmlhttp.responseText) 
     } 
    } 

但問題是, uid並記下它的一個字符串。例如:

"45 note goes here" 

如何分別打印每一行。事情是這樣的:

xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      console.log( <?php echo json_encode($row['uid']); ?> ); 
      console.log( <?php echo json_encode($row['note']); ?> ); 
     } 
    } 
+0

你是非常接近:用'mysql_fetch_array'收集數據到一個數組出它在一個'echo'與'json_encode' JSON。 – kirilloid 2012-03-14 09:42:04

+0

我知道我真的很接近。我嘗試了很多方法,但我總是得到空。它應該是我的PHP中的東西。你可以請張貼關於如何的答案,因爲我幾乎試過了我想到的一切 – jQuerybeast 2012-03-14 09:43:15

+0

@jQuerybeast「我嘗試了很多方法,但我總是得到空。」你檢查過你的MySQL結果嗎?你從數據庫中得到了什麼東西嗎?也許你的查詢是錯誤的或只是返回一個空的結果爲請求的參數... – feeela 2012-03-14 09:47:18

回答

1

你'非常正確。在你的php腳本中,返回一個json字符串,然後在你的javascript中,你可以將該字符串解析爲一個javascript對象。所以:

$json = array(); 
while($row = mysql_fetch_array($result)) 
{ 
    $json['uid']=$row['uid']; 
    $json['note']=$row['note']; 
} 
print json_encode($json); 

然後

xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     var jsontext = xmlhttp.responseText; 
     var json = JSON.parse(jsontext); 
     console.log(json.uid) 
     console.log(json.note) 
    } 
} 
+0

它的幾乎是我一直在尋找的想法,但不幸的是這並不奏效。這個var json = JSON.parse(xmlhttp。responseText的);給我一個錯誤:Uncaught SyntaxError:意外的輸入結束。因爲當我使用$ json ['uid'] = $ row ['uid'];時,xmlhttp.responseText沒有給出任何響應。那麼幾乎所有的錯誤? – jQuerybeast 2012-03-14 09:54:33

+0

@jQuerybeast當然,因爲這隻輸出最後一行 – kirilloid 2012-03-14 09:56:04

+0

當我在我的問題中使用示例時,xmlhttp.responseText輸出所有行。 – jQuerybeast 2012-03-14 09:57:56

0

您試圖json_encode陣列中的各個鍵,嘗試做json_encode($row);否則你將有一個JSON數組[「我的用戶ID」]而不是一個JSON對象{uid:'my user id'}

另外嘗試使用jQuery,您將能夠將響應解析爲JSON對象。

$.post('myurl', {mydata}, function (jsonArray){/*success function*/}, 'json'); 
0

將$行作爲json對象返回。

while($row = mysql_fetch_array($result)) 
{ 
    $data[] = $row; 
} 
echo json_encode($data); 

在你的JavaScript,你現在應該能夠(在不同行,你可能會想循環)使用xmlhttp.responseText.0.uid

注意:我從來沒有用純JavaScript做過這件事,只能用jQuery做,而且不知道它是否可以正常工作。您可能需要發送一個額外的表示響應爲JSON的頭(header('Content-type: application/json');),您可能需要先解析responseText,以便將其解釋爲對象。

+0

這不起作用,因爲xmlhttp.responseText.0.uid無效。 – jQuerybeast 2012-03-14 09:56:55

+0

正如@Apemantus提到的,我猜測,你仍然必須解析responseText,但是我發現你已經找到了你的答案,祝你的開發順利! – Bram 2012-03-14 12:13:40

-1

任何機會使用在客戶端(jQuery的一個舉例)一個JSON解析器和對你的JavaScript像

for(i=0; i<rows.length; i++) 
console.log(rows[i]) 

中行爲$ .parseJSON(xmlhttp.responseText)