2013-03-11 49 views
0

對於我的書店,我開始建立一個cashdesk腳本。這是一個非常簡單的形式,用ajax動態搜索。這是本地PC的腳本,因此腳本不會在網上發佈。如何在mysql查詢後獲取json數據在阿賈克斯

當我掃描EAN代碼時,我的表單填寫了標題,作者,編輯和價格。這本書已經準備好加入籃子了。

現在我試圖在這個腳本中介紹Json:但我不明白如何在腳本中獲取mysql查詢的值,並將它們放在我的cashdesk窗體的正確字段中。

我測試了Mysql查詢和Json。

查詢

<?php 
header('Content-Type: text/html; charset=ISO-8859-1'); 

include('connexion.php'); 
$connect_db = connect(); 

$i = 0; 
$tmp = array(); 


$fetch = mysql_query("SELECT jos_vm_product.product_id,product_name,product_author,product_editor,jos_vm_product_price.product_price FROM jos_vm_product INNER JOIN jos_vm_product_price ON (jos_vm_product.product_id = jos_vm_product_price.product_id) WHERE product_EAN = '$_POST[EAN]'"); 

while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) { 
$tmp[$i] = $row; 
} 
echo json_encode($tmp); 

close(); 
?> 

一個JSON爲例:

[{"product_id":"7097","product_name":"Paix pour tous - Livre audio","product_author":"Wayne W. Dyer","product_editor":"Ada","product_price":"20.28"}] 

了AJAX腳本

var xhr = null; 
    function getXhr() 
    { 
    if(window.XMLHttpRequest) xhr = new XMLHttpRequest(); 
    else if(window.ActiveXObject) 
    { 
    try 
    { 
    xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch (e) 
    { 
    xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
} 
else 
{ 
alert("Not Working"); 
xhr = false; 
} 
} 

function ajaxEAN() 
{ 
getXhr(); 
xhr.onreadystatechange = function() 
{ 
if(xhr.readyState == 4 && xhr.status == 200) 
{ 

var data = '{"product_id": "product_id", "product_name":"product_name", "product_author":"product_author", "product_editor":"product_editor", "product_price":"product_price"}'; 

oData = JSON.parse(data); 
for(var i in oData){ 
document.getElementById(i).value = oData[i]; 
} 

} 
} 
xhr.open("POST",'ajaxrecupaddr.php',true); 
xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 
EAN = document.getElementById("EAN").value; 
xhr.send("EAN="+EAN); 
} 

感謝您的幫助!

+0

哇!這是一個不安全的PHP腳本。 – Amberlamps 2013-03-11 15:02:17

+0

你是說你根本無法從響應中獲取JSON並在你的JS中使用它? – 2013-03-11 15:04:19

+0

請重新構建你的問題..添加你做了什麼..你得到了什麼...什麼是預期的。 – 2013-03-11 15:06:26

回答

0

據瞭解,您根本無法從響應中獲取JSON。如果是這樣,比你只需要做:

xhr.onreadystatechange = function() 
{ 
    if(xhr.readyState == 4 && xhr.status == 200) {   
    oData = JSON.parse(xhr.responseText); 
    for(var i = 0; i < oData.length; i++) { 
     for(var key in oData[i]){ 
      document.getElementById(key).value = oData[i][key]; 
     }  
    } 
} 

在那裏,xhr.responseText從服務器接收到的JSON將返回一個字符串。

此外,一些注意事項: 而不是

header('Content-Type: text/html; charset=ISO-8859-1'); 

,你應該更好地利用:

header('Content-Type: application/json;'); 

另外,在線路下面你打開到SQL注入:

$fetch = mysql_query("SELECT jos_vm_product.product_id,product_name,product_author,product_editor,jos_vm_product_price.product_price FROM jos_vm_product INNER JOIN jos_vm_product_price ON (jos_vm_product.product_id = jos_vm_product_price.product_id) WHERE product_EAN = '$_POST[EAN]'"); 

而不是簡單地做WHERE product_EAN = '$_POST[EAN]'你應該至少做WHERE product_EAN = '".mysql_real_esape_string($_POST["EAN"]) . "'

$fetch = mysql_query("SELECT jos_vm_product.product_id,product_name,product_author,product_editor,jos_vm_product_price.product_price FROM jos_vm_product INNER JOIN jos_vm_product_price ON (jos_vm_product.product_id = jos_vm_product_price.product_id) WHERE product_EAN = '".mysql_real_esape_string($_POST["EAN"]) . "'"); 

查看更多有關mysql_real_escape_string。當EAN中有'符號時,它將正確地轉義所有潛在的危險符號,並將避免錯誤。另外,閱讀上面鏈接頁面上顯示的警告。因爲不推薦使用MySQL擴展,所以應該更好地更改數據庫擴展。

+0

我對我的帖子做了一些更正。我已經爲Json添加了一個例子,我嘗試在JavaScript中使用它。 FAngel,你的解決方案不起作用,我不明白爲什麼。 – 2013-03-11 16:01:33

+0

瞭解如何使用開發人員工具或螢火蟲(取決於您的瀏覽器)。它會幫助你找到問題。另外,看看更新的答案。 For循環被改變。你的PHP返回一個對象數組。而你試圖用它的工作就像一個簡單的對象 – 2013-03-11 16:06:33

+0

我發現這個解決方案,這就是作品:我發現這個解決方案,這就是作品: 的OData = JSON.parse(xhr.responseText); 爲(VAR i的ODATA){ 的document.getElementById( 「PRODUCT_ID」)值= ODATA [0] .product_id。 document.getElementById(「product_name」)。value = oData [0] .product_name; 。 的document.getElementById( 「product_author」)值= ODATA [0] .product_author; 。 的document.getElementById( 「product_editor」)值= ODATA [0] .product_editor; 。 的document.getElementById( 「PRODUCT_PRICE」)值= ODATA [0] .product_price; } 感謝。 – 2013-03-11 19:15:29