Передача массива php в качестве переменных для загрузки JavaScript и обратно в массив php? - PullRequest
0 голосов
/ 20 января 2012

Я видел много связанных примеров, но я все еще запутался. Я использую 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

Любые предложения действительно приветствуются, спасибо!

EDIT

Спасибо, ребята, я думаю, что теперь я верный путь, но проблема с передачей этого массива через URL в javascript остаётся. Или, может быть, я неправильно понимаю в файле обратного вызова php end. Я покажу вам, что изменилось:

   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) {
   ...

Здесь, на другой стороне, я получаю: Предупреждение: неверный аргумент указан для foreach () в response.php в строке 33, и эхо пусто

Чего не хватает?

Ответы [ 2 ]

1 голос
/ 20 января 2012

Ваш код не будет работать. Если у вас есть

$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 и заполняете переменные Javascript значениями PHP, вы должны использовать json_encode, чтобы убедиться, что вы генерируете правильный Javascript. Любые синтаксические ошибки и весь блок кода Javascript замирают в воде, как только клиент начинает пытаться его выполнить.

1 голос
/ 20 января 2012

Для передачи массивов / объектов из PHP в JavaScript вы можете использовать функции json_encode() / json_decode().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...