我看到了许多相关的例子,但我仍然感到困惑。我使用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为空
缺少什么?
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代码块都将被淹没。