将php数组作为变量传递到javascript加载url并返回到php数组


Passing php array as variables to javascript load url and back to php array?

我看到了许多相关的例子,但我仍然感到困惑。我使用ajax(我对此了解不多)来获得每xxx秒更新一次的文件的结果。如果我只传递一个变量,它会很好地工作,但如果我需要从php传递一个数组,最好的方法是什么?

结构很简单:

show_results.php
<?php
include_once('modWhosonlineCustom.inc.php');
$document->addScript("http://code.jquery.com/jquery-latest.js");
$document->addScript("ajax.js");
$array_name = modWhosonlineCustom::getOnlineUserNames();//the array I need to pass to javascript variable
?>
<script>
var whosonline = '<?php echo "$array_name"; ?>';
</script>
<div id="results"></div>

Ajax代码在url加载中需要构建多个参数:

  ajax.js
  $(document).ready(function() {
    $("#results").load("response.php?array_name[param1]&array_name[param2]");
  var refreshId = setInterval(function() {
  $("#results").load("response.php?array_name[param1]&array_name[param2]&randval="+ Math.random());
  }, 10000);
  $.ajaxSetup({ cache: false });
  });

回到PHP响应页面,我如何再次使用通过url传递的数组参数?

  response.php
  <?php
  $names = $_GET['array_name'];
  foreach ($names as $name) {
  //do something

非常感谢您的任何建议,谢谢!

编辑

谢谢大家,我认为我现在是正确的方式,但解决了通过javascript中的url传递这个数组的问题。或者我在php端回调文件中没有以正确的方式得到它。我将向您展示什么是经过修改的:

   show_results.php
   ...
   <?php
   $names = modWhosonlineCustom::getOnlineUserNames();
   ?>
   <script>
   var whosonline = '<?php echo "json_encode($names)"; ?>';
   </script>

   ajax.js

   $(document).ready(function() {
   $("#atendentes").load("response.php?names=" + whosonline);
   var refreshId = setInterval(function() {
   $("#atendentes").load("response.php?names=" + whosonline + "&randval="+ Math.random());
   }, 10000);
   $.ajaxSetup({ cache: false });
   });

   response.php

   $users = $_GET['names'];
   $users = json_decode($users);
   echo "user: $users";
   $names = $users;
   foreach ($names as $name) {
   ...

我得到的另一面是:警告:第33行response.php中为foreach()提供的参数无效,echo为空

缺少什么?

要将数组/对象从PHP传递到JavaScript,可以使用json_encode()/json_decode()函数。

您的代码无法工作。如果你有

$arr = array('a', 'b', 'c');
echo $arr;

你实际上得到了

Array

作为输出。不是数组的内容。要将数组从PHP"输出"到JS,必须将其转换为本地Javascript,这就是json_encode的作用:

<?php
$arr = array('a', 'b', 'c');
?>
var js_array = <?php echo json_encode($arr) ?>;

将产生

var js_array = ["a","b","c"];

一般来说,无论何时使用PHP生成javascript代码,并使用PHP值填充javascript变量,都应该使用json_encode来确保生成有效的javascript。一旦客户端开始尝试执行,任何语法错误和整个Javascript代码块都将被淹没。