2011-08-16 56 views
0

我有一个简单的数组,我试图处理。它由两部分组成。一组vid_ids和一个称为page的元素。我最初使用for循环只是通过vid_id数组,但现在我添加了page元素,我不太清楚如何处理它。任何人有任何想法在javascript中处理多层json数组

PHP

$array=array(); 
$sql = 'SELECT * from video LIMIT 0,9'; 
$stmt = $conn->prepare($sql); 
$result=$stmt->execute(); 
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
{ 
    $array[]=htmlspecialchars($row['vid_id'], ENT_NOQUOTES, 'UTF-8'); 
} 
$data['vid_array']=$array; 
$data['page']=1; 
$out = json_encode($data); 
print $out; 

的Javascript

$.getJSON("load_live.php?t=" + (new Date()), function(json) { 
    for(vid_array.i=0; i < json.length; vid_array.i++) { 
     $('#element').append('<div id="'+json.vid_array[i]+'"></div>'); 
    } 
    $('#element').append(json.page); 
}); 

JSON输出

{ “vid_array”:“3si7bxwk8ftpnvsw1gcf 6giyxxch46sn”, “jch0dfepnu9hn0uw3m283g429mcj63q6”, “arh3xeklxjlztffxtybnucfnzosetgr8”, “6duy7xxj274w2cmhauth1tj933ck5i6z”, “9xx6pefa52s38ez77s5nbhz6jywbohc6”, “4eslxxl4etj5smhhr3wymc6pr8kys10c”, “4db1hp47be4auel633okbg6l884u0ef5”, “incwb9juxug8h986r9xt738ru4n0camd”, “vmsoqx03vppflh646b3au6jrlzt6mkej”], “网页”:1}

+1

随着'指定ENT_NOQUOTES',你不是当你嵌入一个属性里面的内容逃逸引号的话,那么你已经有了一个持续性的XSS漏洞。我可以执行任意脚本通过坚持像“”onclick =“alert(1337)”bogus =“'的有效载荷。要修复,请将'ENT_NOQUOTES'从调用中移除到'htmlspecialchars'。从[PHP文档](http://php.net/manual/en/function.htmlspecialchars.php)中,当'ENT_NOQUOTES'为**时,''''''(双引号)变成''"' ** set。“ –

+0

感谢哥们,我会解决这个问题 – Scarface

+0

现在有什么不能用了吗我认为所有你必须改变的是'json.length'到'json.vid_array.length'其他所有的东西看起来不错 – sdleihssirhc

回答

1

貌似你的JavaScript for-loop有点关闭。试试这个

for (var i = 0; i < json.vid_array.length; i++) { 
    $('<div>').attr('id', json.vid_array[i]).appendTo('#element'); 
} 

而且,在我的评论中提到,你不需要使用htmlspecialchars()那里。只需将vid_id值分配给数组

$array[] = $row['vid_id']; 
+0

谢谢菲尔我以为htmlspecialchars对于转义输出非常重要吗? – Scarface

+0

@Sfaceface 'json_encode()'把你的数据转换成客户端友好的格式,使用我的答案中显示的'attr()'方法会给你更好的连接速度 – Phil

+0

@Sfaceface一世 意思是'attr()'方法自动编码问题字符,而你原来的连接方法不会 – Phil