在PHP和Javascript之间传输数组的最佳方法

所以我有从数据库retreivedlogging数组。 该数组是格式;

$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能够遍历所有的logging,并使用“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对象作为参数并将其解压缩。

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

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

 <script type="text/javascript"> window.sitescriptdata = {}; window.sitescriptdata.foo = ( <?php echo json_encode( $structure ); ?> ); </script> 

对于基本的东西,节省你做一个AJAXcallback。 另外,如果你想将数据粘贴到一个DOM节点,那么“元对象”的方式是我真正喜欢的。

 <div id="foobar"> <div><object class="metaobject"> <param name="data" value="<?php echo htmlentities(json_encode($data), ENT_QUOTES );?>" /> </object></div> </div> 

现在看起来可能不太好,但它是直接将数据与DOM节点相关联的有效方式,而不需要知道该节点的确切唯一path。 如果你有很多很多的数据集需要附加到特定的屏幕元素,非常方便。

我通常使用jQuery的http://noteslog.com/metaobjects/插件,但它很简单,我有时自己写(它曾经有一段时间,我找不到插件,但新的如何工作);

完成后,会有

$(“div#foobar> div”).get()。data。($ yourarrayhere)

可见于您的代码。

为了跟进你的问题(和我的回复,我在评论回复中用完了空格),下面是我使用的一个非常简化的代码子集:

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; 

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

即时通讯还是相当新的说也许这种方法不是最安全的,但你可以随时把你的JavaScript数组变成一个string,然后通过它的URL传递给PHP的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']; 

希望有所帮助