使用Ajax将PHP字符串传递给Javascript变量
我从数据库中检索数据,如下所示:使用Ajax将PHP字符串传递给Javascript变量,php,javascript,mysql,ajax,Php,Javascript,Mysql,Ajax,我从数据库中检索数据,如下所示: while($row = mysql_fetch_array($result)) { echo $row['uid']; echo $row['note']; } 我使用ajax打印它,如下所示: xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { co
while($row = mysql_fetch_array($result))
{
echo $row['uid'];
echo $row['note'];
}
我使用ajax打印它,如下所示:
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
console.log(xmlhttp.responseText)
}
}
但问题是uid和note是一个字符串。例如:
"45 note goes here"
如何分别打印每一行。大概是这样的:
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
console.log( <?php echo json_encode($row['uid']); ?> );
console.log( <?php echo json_encode($row['note']); ?> );
}
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
log();
log();
}
}
如果要对数组中的各个键进行json\u编码,请尝试执行json\u编码($row)
否则您将拥有一个JSON数组['my user id'],而不是一个JSON对象{uid:'my user id'}
还可以尝试使用jQuery,您将能够将响应解析为JSON对象
$.post('myurl', {mydata}, function (jsonArray){/*success function*/}, 'json');
将$row作为json对象返回
while($row = mysql_fetch_array($result))
{
$data[] = $row;
}
echo json_encode($data);
在javascript中,您现在应该能够使用xmlhttp.responseText.0.uid
(您可能希望在不同的行上循环)
注意:我从来没有用纯javascript做过这件事,只是用jQuery做过,我不知道这是否能正常工作。您可能需要发送一个额外的头,指示响应是JSON(header('Content-type:application/JSON');
),您可能需要首先解析responseText,以便将其解释为一个对象。是否有机会在客户端使用JSON解析器(例如jQuery的解析器)并在JavaScript上使用类似的内容
for(i=0; i<rows.length; i++)
console.log(rows[i])
for(i=0;i你说得很对。在php脚本中,返回一个json字符串,然后在javascript中,你可以将该字符串解析为javascript对象。因此:
$json = array();
while($row = mysql_fetch_array($result))
{
$json['uid']=$row['uid'];
$json['note']=$row['note'];
}
print json_encode($json);
然后
你非常接近:用mysql\u fetch\u array
收集数据到一个数组中,然后用echo
作为json与json\u encode
一起输出。我知道我非常接近。我尝试了很多方法,但总是得到空值。这应该是我php中的一些东西。你能给出一个关于如何实现的答案吗,因为我几乎尝试了我所想的一切of@jQ“我尝试了很多方法,但总是无效。”你检查过你的MySQL结果了吗?你从数据库中得到什么了吗?也许你的查询是错误的,或者只是为请求的参数返回了一个空结果…@feeela如果我只做responseText,那么它就工作了。所以我的MySQL没有问题。这几乎是我一直在寻找的想法,但不幸的是这不起作用。这个变量是json=JSON.parse(xmlhttp.responseText);给我一个错误:未捕获的语法错误:输入意外结束。因为xmlhttp.responseText在我使用$JSON['uid']=$row['uid'时不给出任何响应.那么这几乎是错的吗?当我在我的问题中使用这个示例时,xmlhttp.responseText输出所有行。是的,对不起;处理一行(如果调用多行,则为最后一行)的代码有些仓促。如果返回多行,则希望$json是多维数组(例如$json[$I]['uid']etc,然后每次运行时增加$i),然后循环使用json对象等。这不起作用,因为xmlhttp.responseText.0.uid无效。正如@Apemantus提到的,我猜,您仍然需要解析responseText,但我看到您已经找到了答案,祝您开发顺利!
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var jsontext = xmlhttp.responseText;
var json = JSON.parse(jsontext);
console.log(json.uid)
console.log(json.note)
}
}