Javascript中的错误消息

时间:2012-03-12 08:36:45

标签: javascript

我有一个PHP代码:

  if($billing_total>$limit_to_send){

    echo '<script type="text/javascript">
    window.onload = function() {
    alert("Sorry, you do not have enough credit");
 }
   </script>';

当我打印此消息时,它将在PHP页面的开头打印,如下所示:

  <script type="text/javascript">
                window.onload = function() {
                alert("Sorry, you do not have enough credit");
             }
               </script>

        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

        <html xmlns="http://www.w3.org/1999/xhtml">
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        -----------------------------------------------------------

这导致浏览器中我页面的标题(徽标)向下移动一行。

页面看起来很糟糕,因为那里的所有项目都会向下移动一行。

我希望你能清楚。请问任何解决方案?

=============================================== ============================

感谢所有人......

解决方案:

$alert_message=<script type="text/javascript">
    window.onload = function() {
    alert("Sorry, you do not have enough credit");
 }
   </script>

$alert_message代码之前的HTML代码中的某处打印body ^ _ ^

3 个答案:

答案 0 :(得分:2)

确保您永远不会在DTD (doctype declaration)之前输出任何内容。

有关详细信息,请参阅this question ...

doctype声明必须是html页面的第一个元素,它来自浏览器决定如何处理其余的html代码。在此之前输出任何内容可能会使您的浏览器进入quirks mode,因此您无法确定浏览器将如何呈现您的网页。


如何避免这种情况?

echo命令在到达其行时执行,并且看起来其余的html代码在此之后。

你可以

  • 将html DTD和标题移动到php的顶部(但有时候这是不可能的)或者
  • 将错误html存储在一个变量中,所以代替echo '<script ...执行$errorhtml = '<script ...并输出该字符串(如果不为空),在头部或正文中的特定位置生成php的代码。< / LI>
  • 如果您无法控制原始来源,可以考虑重定向到具有自己的html DTD,标题和正文的错误页面,您可以将其设计为最适合您。

答案 1 :(得分:1)

die()附加到if代码块中,或者让php在正文或头部的某处打印脚本。

答案 2 :(得分:1)

这表明您的应用程序设计不当。我建议你改成它:

$errors = array();
if($billing_total>$limit_to_send){
  $errors[] = 'Sorry, you do not have enough credit'; 
}

然后在您的HTML文件上,在<body>标记关闭之前,读取您的数组并显示任何错误

<?php if(is_array($errors)): ?>
  <script type="text/javascript">
   <?php foreach($errors as $error): ?>         
        alert('<?php echo $error; ?>');
   <?php endforeach; ?>
  </script>
<?php endif; ?>