在 PHP 和 Javascript 之间传输数组的最佳方式 [重复]

Best way to transfer an array between PHP and Javascript [duplicate]

提问人:Ali 提问时间:12/26/2008 最后编辑:Ali 更新时间:10/3/2012 访问量:35156

问:

因此,我从数据库中检索了一组记录。数组的格式为;

$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>
php javascript ajax 数组 dom

评论


答:

29赞 barfoon 12/26/2008 #1

为此,我倾向于使用JSON对象:

  • 在服务器端,JSON 对数据进行编码:json_encode($data);
  • 在 JavaScript 方面,我编写了一个函数,该函数将 JSON 对象作为参数并解压缩它。

当你解压缩对象时,你可以将数组的内容打印到一个标签中,或者你想要在页面上的任何位置(jQuery在这方面做得非常不错)。<DIV>

评论

2赞 Ali 12/26/2008
如何使用 javascript 解压缩 JSON 对象?你能为此添加一些示例代码,并在你的答案中添加一个解压缩对象的样本吗?谢谢
0赞 rg88 12/26/2008
看看这个: ditio.net/2008/07/17/php-json-and-javascript-usage
0赞 samvermette 2/24/2010
MooTools 还进行 JSON 编码/解码:mootools.net/docs/core/Utilities/JSON
1赞 barfoon 12/26/2008 #2

为了跟进您的问题(以及我的回复,我在评论回复上用完了空间),这是我使用的代码的一个非常简化的子集:

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;

评论

0赞 Ali 12/26/2008
最后一个问题。我试了一下,现在我在 javascript 中得到了一个包含我每一行的“对象”,所以我想我会以 myObj[0].title 或 myObj[1].title 的形式访问它。问题是,如果我想通过ID获得某物的标题,我怎样才能找到它。该 id 将位于 myObj[1].id 或 myObj[0].id 中
1赞 barfoon 12/26/2008
尝试添加句点 Obj.1.id 有关 JSON 表示法的更多信息 hunlock.com/blogs/Mastering_JSON_JavaScript_Object_Notation) 参见: var myObject = { 'color' : 'blue', 'animal' : {'dog' : 'friendly' } };document.writeln(myObject.animal.dog);输出友好
0赞 barfoon 12/26/2008
啊,我为那里的糟糕格式道歉。
0赞 Ali 12/26/2008
实际上我想知道,如果我有一行的 ID,但没有数组索引,我怎么能识别它而不必遍历所有行。即:我想要 myObject[X].title,其中 myObject[X].id=4。这里 X 是我想要的。顺便说一句,我接受你的回答,因为你已经帮了大忙:)
12赞 Kent Fredric 12/26/2008 #3

如果你在做内联数据,我一直很喜欢做

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

对代码可见。

0赞 Lan 5/10/2012 #4

我还是很新的,说也许这种方法不是最安全的,但你总是可以将你的 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'];

希望能有所帮助

1赞 Marco 5/31/2012 #5

在像这里这样的 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)
}
...