提问人:Ali 提问时间:12/26/2008 最后编辑:Ali 更新时间:10/3/2012 访问量:35156
在 PHP 和 Javascript 之间传输数组的最佳方式 [重复]
Best way to transfer an array between PHP and Javascript [duplicate]
问:
因此,我从数据库中检索了一组记录。数组的格式为;
$rows[0]['id']=1;
$rows[0]['title']='Abc';
$rows[0]['time_left']=200;
$rows[1]['id']=2;
$rows[1]['title']='XYZ';
$rows[1]['time_left']=300;
//And so on upto 10-20 rows
将此数组转移到我的 javascript 代码的最佳方法是什么?我希望 javascript 能够遍历所有记录,并使用“id”属性,使用该 id 更新带有一些信息的 div。
我的 javascript 代码位于外部 .js 文件中,但我能够在页面的 HTML 代码中执行 php 代码。所以我可以做这样的事情:
在my_file.js中:
var rows=New Array();
在 HTML 代码中:
<html>
<head>
<script type="text/javascript" src="js/my_file.js"></script>
<script type="text/javascript">
<? foreach ($rows as $row):?>
<? extract($row);?>
rows[<?=$id;?>]['title']="<?=$title;?>";
//And so on
<? endforeach;?>
</script>
答:
为此,我倾向于使用JSON对象:
- 在服务器端,JSON 对数据进行编码:
json_encode($data);
- 在 JavaScript 方面,我编写了一个函数,该函数将 JSON 对象作为参数并解压缩它。
当你解压缩对象时,你可以将数组的内容打印到一个标签中,或者你想要在页面上的任何位置(jQuery在这方面做得非常不错)。<DIV>
评论
为了跟进您的问题(以及我的回复,我在评论回复上用完了空间),这是我使用的代码的一个非常简化的子集:
jQuery 中的 Javascript AJAX 处理程序:
$.ajax({
type: "POST",
url: "BACKEND.php",
timeout: 8000,
data: "var1=" + myVar,
dataType: "json",
error: function(){
$("#DIVID").html("<div class='error'>Error!</div>");
},
success: function(jsonObj){
$("#DIVID").html(jsonObj.mydata);
}
});
PHP Array:
$data['mydata'] = $myData;
评论
如果你在做内联数据,我一直很喜欢做
<script type="text/javascript">
window.sitescriptdata = {};
window.sitescriptdata.foo = ( <?php echo json_encode( $structure ); ?> );
</script>
对于基本的东西,可以节省您执行 AJAX 回调的时间。另外,如果你想将数据粘附到 DOM 节点上,“元对象”方式是我非常喜欢的。
<div id="foobar">
<div><object class="metaobject">
<param name="data" value="<?php echo htmlentities(json_encode($data), ENT_QUOTES );?>" />
</object></div>
</div>
现在这可能看起来不太好,但它是一种将数据直接与 DOM 节点关联的有效方法,而无需知道该节点的确切唯一路径。如果您有许多数据集需要附加到特定的屏幕元素,这将非常方便。
我通常使用 http://noteslog.com/metaobjects/ jQuery 插件,但它非常简单,我有时会自己编写它(有一段时间我找不到插件,但新的工作方式)
完成后,将有
$(“div#foobar > div”).get().data。($yourarrayhere)
对代码可见。
我还是很新的,说也许这种方法不是最安全的,但你总是可以将你的 javascript 数组变成一个字符串,然后通过 php 的 URL 将其传递给 GET。
所以:
for(var i=0;i < jsarray.length;i++)
{
var x = jsarray[i];
urlstring += "myvalue[]="+x+"&";
}
document.location.href = "mypage.php?"+urlstring;
然后PHP将是:
$phparray = $_GET['myvalue'];
希望能有所帮助
在像这里这样的 AJAX 示例中,您可以通过以下方式解决这个问题:
.php 文件(ajax 返回函数)
$myArray = array("object_id"=>1, "object_title"=>"Testobject");
return json_encode($myArray);
.js 文件(JavaScript 函数)
...
if(g_httpRequest.readyState == 4)
{
var jsonRes = JSON.parse(g_httpRequest.responseText);
alert(jsonRes.object_title)
}
...
上一个:何时在数组/数组列表上使用链表?
下一个:像素编程继续
评论