如果有人知道我的问题有一个可用的答案,我很抱歉,然而,经过一周的浏览和试用,我想我会问专家。
Aim:通过服务器端代码查询SQL数据库(在本例中为php),然后将此数据库信息传递给网页上的javascript,以便动态生成按钮。注意,将从返回的数据库中返回多行。一旦生成按钮,它们就会调用php代码来更改数据库中的值,然而,这是我目前正在挣扎的第一部分。
当前解决方案(不完全起作用):我认识到在这段代码上需要进行优化,但是,由于我仍在尝试对问题进行排序,我稍后将亲自检查这些小部分,不需要详细说明。
概述: PHP通过mysql_query发送一个mysql_query查询,以从数据库中获取信息。然后,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正在存储来自mysql查询的答案,$total_array1是我生成一个关联数组(就像我从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_array1中,是因为我想证明我可以传递变量。代码成功地将该数组传递到另一个数组中,我可以通过responce_json1访问javascript。不幸的是,不管我如何尝试从mysql_fetch_array (它被设置为返回一个关联数组)返回关联数组,在responce_json完成的当前代码中,我没有得到答案。在我的试验中,当我尝试获取aa关联数组时,返回了“null”,通常情况下,当我试图访问mysql返回的关联数组的'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‘的user_name,不能在javascript中取出弗兰克。PS我意识到这两个数组只有user_name的共同点,但这是我目前唯一想要访问的。
抱歉,我的帖子太长了,只是想把我所有的想法都记下来。
从建议中得出的结果: mysql_fetch_assoc - Orangepill;我尝试过这个,没有改变。从我可以在web上查看的所有文档中,我了解到这与mysql_fetch_array($result,MYSQL_ASSOC)一样返回;
移动closeDatabase.php -米歇尔费尔德海姆;移动这没有影响输出。
console.log(responce_json) -- Orangepill;谢谢你的支持,我没有意识到我可以这样评价它。当我询问XMLHttpRequest时,通过控制台返回以下内容: XMLHttpRequest {statusText:"OK",状态: 200,响应:"null,{"user_name":"bb",“day”:“5”},responseType:"",responseXML: null…}。从这里我可以看到,mysql_fetch_array答案以null的形式传输,这是由我收到的错误引起的,它是“未察觉的错误: InvalidStateError: DOM 11”。似乎找不出解决这个问题的方法。
发布于 2013-05-27 16:33:25
所以我搞错了。
问题似乎是,当调用php脚本生成网页时,脚本中的include语句可以被访问。当从javascript代码调用脚本时,无法找到处理打开和关闭数据库的包含的语句。
这导致答案不被退回。
发布于 2013-05-25 07:34:56
您正在包括一个名为closeDatabase.php的脚本。如果这样做符合名称的建议,那么您应该在获取所有数据的之后执行。
https://stackoverflow.com/questions/16747268
复制相似问题