将数据库信息从php传输到javascript - mysql_fetch_array没有按预期运行

时间:2013-05-25 07:01:10

标签: php javascript ajax arrays associative

如果有人知道我的问题的可用答案,我很抱歉,但是经过一周的网络搜索并试用了一些东西,我想我会问专家。

目标: 通过服务器端代码(在本例中为php)查询SQL数据库,然后将此数据库信息传递给网页上的javascript,以允许动态生成按钮。注意,返回的数据库会有多行。一旦生成按钮,他们将调用php代码来更改数据库中的值,但这是我目前正在努力的第一部分。

当前的解决方案(不太正常): 我认识到这个代码有优化,但是由于我仍然试图对问题进行排序,我将在稍后自己查看这些内容并且不需要详细说明。

概述: PHP通过mysql_query发送mysql查询以从数据库中获取信息。然后AJAX与json_encode一起用于在php中编码信息,然后使用echo打印出javascript的答案。

PHP代码:

    <?php //start php code
include 'DatabasePhp/openDatabase.php'; //includes my mysql_connect code to connect to the database. Works.
$query = 'SELECT `users`.`user_name`, `users`.`user_id`, `users`.`join_date`'
. ' FROM users'
. ' LIMIT 0, 30 ';
$result= mysql_query($query);
include 'DatabasePhp/closeDatabase.php';
$aa = mysql_fetch_array($result, MYSQL_ASSOC);
$total_array[0] = $aa;
$total_array[1] = array('user_name' => 'bb','day' => '5');
$formatted_variable_pass = json_encode($total_array);
echo $formatted_variable_pass;
?>

PHP说明: 一旦我修复问题以运行我的数据库结果的每一行并将它们添加到$ total_array,我将使用while循环。目前,它只设置了两个数组索引来突出我的问题。 $ total_array [0]存储了mysql查询的答案,$ total_array [1]是我生成一个关联数组(就像我以为我是从mysql_fetch_array中获取的)。

Javascript代码:

    <script type="text/javascript" language="JavaScript">
document.write("Well your starting javascript");
var btn_num = 0;

if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

xmlhttp.onreadystatechange=function() // the function called when a result is returned from the php
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
var responce_json = JSON.parse(xmlhttp.responseText);
    document.getElementById("txtHint").innerHTML="got responce "+responce_json[0]['user_name']+"  "+responce_json[1]['user_name'];
}else if(xmlhttp.status==404){
    document.getElementById("txtHint").innerHTML="Not found";
}else if(xmlhttp.readyState==0){
    document.getElementById("txtHint").innerHTML="Responce was 0";
}else{
    document.getElementById("txtHint").innerHTML="Not completed the responce";
}
}
xmlhttp.open("POST","DatabasePhp/getUsers.php",true);
xmlhttp.setRequestHeader("Content-type","application/json;charset=UTF-8");
xmlhttp.send(null);

document.write("and the results are .... ");

</script>

Javascript备注: 代码基本上基于正在使用的浏览器创建XMLHttpRequest类型类,然后通过xmlhttp.open发送POST请求。响应通过xmlhttp.onreadystatechange = function()来处理,即只有在确认答案完成后才会写入答案,即当xmlhttp.readyState == 4&amp;&amp; xmlhttp.status == 200。

问题: 我无法将mysql_fetch_array数据传递给javascript。我将一个php关联数组放入$ total_array [1]的原因是因为我想证明我可以传递变量。代码成功地将该数组传递到另一个数组中,我可以通过responce_json [1] ['user_name']在javascript中访问。不幸的是,无论我如何尝试从mysql_fetch_array(设置为返回一个关联数组)返回的关联数组,在当前代码由responce_json [0] ['user_name']完成,我都没有得到答案。在我试用期间,当我尝试在[0]处获取aa关联数组时,我返回了'null'的混合,并且当我尝试访问['user_name']时,我的代码通常不会完成代码。 mysql返回了关联数组。

所以问题是:我错过了mysql_fetch_array返回的关联数组(设置为通过MYSQL_ASSOC返回关联数组),它没有像手动创建的关联数组那样响应(一次在javascript中) - 在PHP中正常工作)我无法弄清楚为什么。有谁知道我如何转换/确保mysql数组的反应像我的手册一样?

附加:当我将php包含到我的网页而不是传递给javascript时,不是sql有问题,写入网页的回应响应是'[{“user_name”:“Frank ”, “USER_ID”: “1”, “join_date”: “2013年5月15日”},{ “USER_NAME”: “BB”, “天”: “5”}]”。因此它成功地从数据库中检索信息,对我来说,这看起来像一个内部有子关联数组的数组,这就是我所追求的,但我只能检索'bb'的user_name,无法在javascript中获取Frank 。 PS我意识到这两个数组只有user_name,但这是我目前唯一要访问的数据。

对于这篇长篇文章感到抱歉,只是想把我的所有想法都记下来。

建议的结果: mysql_fetch_assoc - Orangepill;我试过这个,没有变化。从我可以在网上查看的所有文档中我了解到它返回与mysql_fetch_array相同($ result,MYSQL_ASSOC);

移动closeDatabase.php - Michel Feldheim;移动它对输出没有影响。

console.log(responce_json) - Orangepill;谢谢你,没有意识到我可以这样回顾它。当我询问XMLHttpRequest时,我通过控制台返回以下内容: XMLHttpRequest {statusText:“OK”,status:200,response:“[null,{”user_name“:”bb“,”day“:”5“}]”,responseType:“”,responseXML:null ...}。从中我可以看到mysql_fetch_array的答案是作为null传输的,这是由我收到的错误引起的,这是'未捕获错误:InvalidStateError:DOM异常11'。似乎无法弄清楚这足以解决它的问题。

2 个答案:

答案 0 :(得分:0)

您正在添加一个名为closeDatabase.php的脚本。如果这符合名称的建议,那么您应该> 后获取所有数据。

答案 1 :(得分:0)

毕竟我错了。

问题似乎是,当调用php脚本生成网页时,脚本中的include语句才能被访问。当从javascript代码调用脚本时,无法找到处理打开和关闭数据库的包含语句。

这导致答案没有被退回。