2016-07-10 30 views
1

我正在製作一個網站,其主要功能是每個目錄中的文件列表,這些文件可以下載。我還有一個/ assets目錄,其中目錄樹被複制,但每個頁面都有必要的圖像/腳本,還有用於註釋的.csv文件以及每個文件的信息文件,我希望在其中顯示用戶單擊按鈕時發出JavaScript警報。在JavaScript中使用從PHP文件中搜集的數據

我使用PHP動態列出每個目錄中的所有文件以及文件大小和一些其他信息。我已經設法爲每個文件獲得一個按鈕,如果信息文件不存在,會提示「無信息」。但是,如果文件確實存在,我會得到兩個JavaScript錯誤之一,即SyntaxError: unterminated string literalSyntaxError: missing) after argument list

我與錯誤的按鈕源代碼最終被分割在警報中最後引號後兩行,所以我使用了PHP trim()功能,以消除任何\n S或\r的左文件中,但它什麼也沒做。

至於第二個錯誤,我嘗試使用PHP的htmlentitieshtmlspecialchars刪除文件中的任何引號(因爲這個錯誤必須與此有關),但是這又沒有做任何事情。

我上市的文件中的代碼是這樣的:

foreach(glob('*') as $filename){ 
    if ($filename[strlen($filename) - 1] != '~'){ 
     $info = ''; 
     $file_type = filetype($filename); 
     $infoPath = __DIR__ . '/files' . $_SERVER['REQUEST_URI'] . $filename . '.txt'; 
     if (file_exists($infoPath)){ 
      $handle = fopen($infoPath, 'r'); 
      $info = fread($handle, filesize($infoPath)); 
      fclose($handle); 
     } 
     if ($info == ''){ 
      $info = 'No info :('; 
     } 
     if ($file_type == 'dir'){ 
      echo "<tr><td><img src=\"/assets/images/$file_type.png\" alt=\"$file_type\" width=\"16px\" height=\"16px\" /><a href=\"$filename\">$filename</a></td><td>-</td><td>" . date ("F d Y H:i:s", filemtime($filename)) . "</td><td><button onclick=\"alert('" . trim(htmlentities(htmlspecialcharacters($info))) . "')\">Info</button></td></tr>"; 
     } 
     else{ 
      echo "<tr><td><img src=\"/assets/images/$file_type.png\" alt=\"$file_type\" width=\"16px\" height=\"16px\" /><a href=\"$filename\">$filename</a></td><td>".filesize($filename)."</td><td>" . date ("F d Y H:i:s", filemtime($filename)) . "</td><td><button onclick=\"alert('" . trim(htmlentities(htmlspecialcharacters($info))) . "')\">Info</button></td></tr>\n"; 
     } 
    } 
} 

所以,首先,我該如何終止字符串字面量,其次,我該怎麼辦所假設參數列表?

我有一種感覺,我可能不得不使用AJAX,但我會想,我可以只在JavaScript中回顯一個字符串。

回答

1

我認爲你的回聲有幾個錯誤。逃逸和連接並不好。

  • 您應該使用'以更好地查看轉義代碼。

  • 一些php代碼並不正確。

  • CSS代碼(寬度和高度)必須在style屬性中。

例子:

echo '<tr><td><img src="/assets/images/'.$file_type.png.'" alt="'.$file_type.'" style="width:16px; height:16px;" /><a href="'.$filename.'">'.$filename.'</a></td><td>-</td><td>'.date("F d Y H:i:s", filemtime($filename)).'</td><td><button onclick="alert(\"'.trim(htmlentities(htmlspecialcharacters($info))).'\")">Info</button></td></tr>'; 

其實我覺得你並不需要使用Ajax,因爲你的代碼並不需要被調用特定的事件,但如果一個時間上的頁面加載(指正我錯了)。

所以,只需更正您的echo,它應該沒問題。

希望它有幫助。

+0

感謝您幫助整理我的代碼,但不幸的是它並沒有解決我的問題。我認爲這可能與文件中的數據格式有關。不過謝謝,我的代碼看起來很整齊:) – Isaac274

+0

不客氣。 'alert' onclick事件是否有效?或者返回的錯誤改變了? – JazZ

+0

出於某種原因,我的瀏覽器實際上並沒有註冊新的代碼,但我重新啓動了我的計算機,並且這些錯誤消失了,現在它只是說'SyntaxError:Illegal character',對於我點擊的每個按鈕。我正在嘗試修復它。 – Isaac274

相關問題