繁体   English   中英

AJAX 请求后返回不需要的新行

[英]Unwanted new line returned after AJAX request

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

1. OK

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

1. 
2. OK

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

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

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

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

这是有罪的脚本:

// 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;
  1. 确保在 classQuote.php 中的开头<?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()); 
            }

如果你正在使用 jQuery

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

另见此处http://api.jquery.com/jQuery.trim/

希望能帮助到你

我也遇到了同样的问题。 我想出的最终解决方案如下

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

  2. 从第一个<? 行和 PHP 起始标记 如果您的文件从第 1 行开始,第一个字符应该是<? .

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

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

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

我用这些修好了

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM