如何在mysql查询后获取ajax中的Json数据

时间:2013-03-11 15:00:22

标签: javascript ajax json

对于我的书店,我开始构建一个cashdesk脚本。这是一个非常简单的表单,带有ajax动态搜索。这是本地PC的脚本,因此该脚本不会在网上发布。

当我扫描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);
}

感谢您的帮助!

1 个答案:

答案 0 :(得分: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扩展。