【问题标题】:Error message in JavascriptJavascript 中的错误消息
【发布时间】:2012-03-28 15:55:04
【问题描述】:

我有一个 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>

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

【问题讨论】:

  • 尝试将其移入&lt;head&gt;标签
  • 怎么,我只是在PHP中打印,如何控制HTML页面中的打印位置?
  • 缺少一个右大括号。
  • 所有输出都生成在脚本中的某个位置,或者它的父/子之一(包括)。您必须将 sn-p 移动到不同的上下文中,以便将其放置在适当的位置,或者将输出存储在某处,以便稍后将其写入输出。
  • 看起来你正在使用一些 PHP 框架,你必须使用 frameworks 方法来返回文本。

标签: javascript


【解决方案1】:

确保在 DTD (doctype declaration) 之前不要输出任何内容。

更多信息请参见this question...

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


如何避免这种情况?

echo 命令在到达它的行时被执行,看起来你的 html 代码的其余部分紧随其后。

你也可以

  • 将 html DTD 和标题移动到 php 的顶部(但有时这是不可能的)或者
  • 将错误 html 存储在一个变量中,因此不要使用echo '&lt;script ... 而是使用$errorhtml = '&lt;script ... 并将该字符串(如果不为空)输出到您的 php 的头部或正文生成代码中的特定位置。
  • 如果您无法控制原始来源,您可以考虑重定向到一个错误页面,该页面有自己的 html DTD、标题和正文,您可以根据自己的情况进行设计。

【讨论】:

  • 谢谢 Martin,我无法控制 javascript 代码的打印,它会在 doctype 声明之前出现。知道如何控制吗?
  • 谢谢你,马丁,我已经定义了$alert_message="&lt;script type="text/javascript"&gt; window.onload = function() { alert("Sorry, you do not have enough credit"); } &lt;/script&gt; " 并在&lt;body&gt; 之前的某个地方打印了它
【解决方案2】:

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

【讨论】:

  • &lt;head&gt;被回显/打印/显示之后,将php代码放在php的一部分中。
【解决方案3】:

这表明您的应用程序设计不佳。我建议您将其更改为:

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

然后在您的 HTML 文件中,在 &lt;body&gt; 标签关闭之前,读取您的数组并显示任何错误

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

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多