5

我正在使用 ajax 请求将评论发送到数据库。成功的响应标记为

1. OK

问题实际上是来自 php 脚本的响应是

1. 
2. OK

所以我调试了脚本并注意到在脚本执行以下行时添加了换行符 si:

require_once($ABS_APPS."/quotes/classQuote.php");

经过一些搜索,我读到它可能是 BOM(字节顺序标记)问题。所以我刚刚下载并classQuote.php使用十六进制编辑器打开了文件,发现没有 BOM ......有人可以帮我吗?

PS 我项目中的所有文件都以 UTF-8 编码,我目前使用的是不向文件添加 BOM 的 NetBeans。

这是有罪的脚本:

// Send new comment to DB
case "send":
    $notification = new Notification();
    if($comment->insert($_POST["username"], $_POST["comment"], $_POST["app"], $_POST["entryId"])){
        switch ($_POST["app"]) {
            case "quotes":
                require_once($ABS_APPS."/quotes/classQuote.php");
                $quote = new Quote();
                $quoteData = $quote->get($_POST["entryId"]);
                // If user comments his own entry we don't have to send the notification
                if($quoteData["UserAuthor"] != $_SESSION["User"]){
                    $notification->newComment($_POST["username"], $quoteData["UserAuthor"], $_POST["entryId"], $_POST["app"]);
                }
                break;
            default:
                break;
        }
        echo "OK";
    } else {
        echo "ERROR";
    }
    break;
4

4 回答 4

12
  1. 确保<?php在您的 classQuote.php开头之前没有任何内容
  2. 确保关闭后没有尾随字符/行?>
  3. ?>检查代码行中的某处是否存在标记(遵循 __construct 的流程以及调用内容的位置)

事实上,省略结束标签可能会有所帮助。另一种可能性是:

  // capture output
            ob_start(); 
            require_once($ABS_APPS."/quotes/classQuote.php");
            $quote = new Quote();
            $quoteData = $quote->get($_POST["entryId"]);
            // If user comments his own entry we don't have to send the notification
            if($quoteData["UserAuthor"] != $_SESSION["User"]){
                $notification->newComment($_POST["username"], $quoteData["UserAuthor"], $_POST["entryId"], $_POST["app"]);
  // trim whitespace
            echo trim(ob_get_clean()); 
            }
于 2012-07-21T15:21:10.440 回答
2

如果你使用 jQuery

您可以在 AJAX 成功回调中使用 jQuery.trim(responseData) 来消除空格

参见这里 http://api.jquery.com/jQuery.trim/

希望能帮助到你

于 2012-07-22T09:00:49.403 回答
2

我也面临同样的问题。我想出的最终解决方案如下

  1. 检查加载到您发送 AJAX 请求的文件中的所有文件

  2. 从第一行和 PHP 起始标记中删除多余的空格<?如果您的文件从第 1 行开始,则第一个字符应该是 this <?

  3. 如果它们是 PHP 文件,则不要 ?> 在末尾添加。

  4. 尝试将最后一个行标记保留到编写的最后一行代码。表示不要在文件末尾添加额外的空格。如果代码在第 32 行结束,请不要通过编辑器转到第 33 行。事实上,按下后退按钮并清除下面直到第 32 行的所有内容。

  5. 如果您使用任何 PHP 框架,请确保加载的所有文件的层次结构不应该有相同的问题。例如,如果您使用的是 codeigniter 框架,请确保调用函数的控制器和加载到该控制器中的所有模型不应该有相同的问题。

于 2020-05-31T13:34:34.747 回答
1

我通过这些修复

  1. 确保没有任何东西,在开口之前
  2. 确保结束后没有尾随字符/行?>
  3. 检查代码行中的某处是否存在 ?> 标记(遵循 __construct 的流程以及调用内容的位置)
于 2015-09-17T08:12:10.253 回答