【问题标题】:Passing php array as variables to javascript load url and back to php array?将php数组作为变量传递给javascript加载url并返回给php数组?
【发布时间】:2012-02-15 03:00:50
【问题描述】:

我看到了很多相关的例子,但我仍然感到困惑。我正在使用 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() 提供的参数无效,并且回显为空

缺少什么?

【问题讨论】:

    标签: php ajax arrays url joomla


    【解决方案1】:

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

    【讨论】:

    • 谢谢!我浏览了手册并修改了脚本,但现在的问题是如何从 javascript 生成的 url 再次获取数组。请查看已编辑的问题,谢谢!
    【解决方案2】:

    您的代码不起作用。如果你有

    $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 代码块都将死在水中。

    【讨论】:

    • 非常感谢 Marc B。我认为我现在的问题是如何以可用的方式将数组传回 php 回调文件中。如果你能给我另一个线索,我正在用你的建议编辑我的问题,给你一个想法。谢谢!
    • JSON.stringify 做 JS 端的 json_encode() 等价物,然后可以 url-encode 并放入一个查询字符串......但考虑使用 post 来传输这个,只要查询字符串被浏览器和服务器截断。
    • 嗨,Mark B,我如何使用 POST 来解决这个问题,因为 url 用于调用要自动更新的文件?我不知道如何用这种方法构建逻辑,你能给我举个例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-05
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多