2011-08-16 58 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