将PHP返回的数组插入到JavaScript中

3

我进行了搜索,但由于我对php和ajax非常新手,所以我仍然感到困惑,希望有人能帮助我。

我正在使用一个php脚本来访问数据库的一些ajax。我可以将数据echo出来替换网页上的元素。但是,我想再次将数据作为数组接收,以便在javascript中再次操作。

这是php代码:

<?php $q=$_GET["q"];

$con = mysql_connect('server', 'name', 'pass'); if (!$con) //don't connect {    die('Could not connect: ' . mysql_error()); //give error }

mysql_select_db("database", $con); //select the MySQL database

$sql="SELECT * FROM table WHERE field = '".$q."'";

$result = mysql_query($sql); //$result is an array

$response = $result;

echo json_encode($response); 

echo "<table border='1'>
<tr>
<th>Heading1</th>
<th>Heading2</th>
<th>Heading3</th>
</tr>";

while($row = mysql_fetch_array($result))
  {
  echo "<tr>";
  echo "<td>" . $row['field1'] . "</td>";
  echo "<td>" . $row['field2'] . "</td>";
  echo "<td>" . $row['field3'] . "</td>";
  echo "</tr>";
  }
echo "</table>";

mysql_close($con);

?>

他是用于调用php脚本的ajax/jScript。
function func(var)
{
xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200) //ready
        {
            document.getElementById("div2").innerHTML=xmlhttp.responseText;

        }
    }
xmlhttp.open("GET","getTest.php?q=" + var,true);
xmlhttp.send();
}

您可以看到,它用包含信息的表格替换了 div2。但是,我如何在 jScript 中接收数据数组呢?

谢谢


2
$result 不是一个数组,而是一个 MySQL 结果句柄。你不能使用 json_encode 将其转换为可用的查询结果并在 JavaScript 中使用。 - Marc B
在使用json_encode()之前,您必须从$result中获取结果。 - Michael Berkowski
2
你应该花十分钟时间学习PDO,因为你的变量 $q 被插入到 SQL 中时没有被转义 - tadman
谢谢大家。我现在已经使用了一些PDO,并且更深入地研究了php。 - myol
3个回答

3
如果您的对象十分复杂,建议您研究JSON。

2

正如Marc B所说,SQL查询的结果是一个结果句柄,您需要从中读取然后进行JSON编码:

// run the query
$result = mysql_query("SELECT * FROM table WHERE field = '{$q}'");

// fetch all results into an array
$response = array();
while($row = mysql_fetch_assoc($result)) $response[] = $row;

// save the JSON encoded array
$jsonData = json_encode($response); 

在您的脚本中,可以使用以下代码将该JSON合并到JavaScript中:
<script>
  var data = <?= $jsonData ?>;
  console.log(data); // or whatever you need to do with the object
</script>

谢谢,我已经自己完成了这一部分,但现在我正在尝试在JavaScript中接收json_encode。如果我使用echo命令,我可以打印出数组,但我不知道如何将其发送回我的jScript。 - myol
我已经编辑了上面的答案,展示了如何将数据作为JavaScript标签的一部分包含到页面中。您可以像处理JavaScript中创建的任何常规对象一样处理JSON数据,例如[{field: 'value'},{field: 'othervalue'}] - steveukx

1
<script>
var foo = <?php echo json_encode($arr); ?>;
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接