Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Ajax将PHP字符串传递给Javascript变量_Php_Javascript_Mysql_Ajax - Fatal编程技术网

使用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)
  }
}