如果有人知道我的问题的可用答案,我深表歉意,但是在网上查看并试用了一周后,我想我会问专家。
目的:通过服务器端代码(在本例中为 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 注释: 一旦我解决了问题,我将使用一个 while 循环来遍历我的数据库结果的每一行并将它们添加到 $total_array。目前它只设置了两个数组索引来突出我的问题。$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 && 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_fetch_array 返回的关联数组的某些内容(设置为通过 MYSQL_ASSOC 返回关联数组),它没有像手动创建的关联数组那样响应(曾经在 javascript 中 - 在 php 中正常工作)我不知道为什么。有谁知道我如何转换/确保 mysql 数组像我的手动数组一样反应?
附加:问题不是 sql,因为当我将 php 包含到我的网页中而不是传递给 javascript 时,写入网页的回显响应是 '[{"user_name":"Frank"," user_id":"1","join_date":"2013-05-15"},{"user_name":"bb","day":"5"}]'。因此,它成功地从数据库中检索信息,对我来说,这看起来像是一个内部包含子关联数组的数组,这就是我所追求的,但我只能检索 'bb' 的用户名,无法在 javascript 中获取 Frank . PS我意识到这两个数组只有共同的user_name,但这是我目前唯一尝试访问的。
抱歉发了这么长的帖子,只是想把我所有的想法都记下来。
建议的结果: mysql_fetch_assoc – Orangepill;我试过这个,没有变化。从我可以在网上查看的所有文档中,我了解到这与 mysql_fetch_array($result, MYSQL_ASSOC); 的返回值相同。
移动 closeDatabase.php - Michel Feldheim;移动它对输出没有影响。
console.log(responce_json) – 橙丸;谢谢你,没想到我可以这样评论。当我询问 XMLHttpRequest 时,我通过控制台返回以下内容: XMLHttpRequest {statusText: "OK", status: 200, response: "[null,{"user_name":"bb","day":"5"}] ", responseType: "", responseXML: null…}。从这里我可以看到 mysql_fetch_array 答案被传输为空,这是由我收到的错误引起的,即“未捕获的错误:InvalidStateError:DOM Exception 11”。似乎无法弄清楚这足以解决它。