2016-07-10 17 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

相关问题