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

时间:2012-07-21 15:13:32

标签: php ajax byte-order-mark

我正在使用ajax请求向DB发送评论。

标志着成功的回应
1. OK

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

1. 
2. OK

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

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

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

P.S。我的项目中的所有文件都包含在UTF-8中,我目前是usint 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;

4 个答案:

答案 0 :(得分:8)

  1. 确保在classQuote.php
  2. 开头<?php之前没有任何内容。
  3. 确保在结束?>
  4. 后没有尾随字符/行
  5. 检查代码行中某处是否存在?>标记(遵循__construct中的流程以及调用内容的位置)
  6. 事实上,省略结束标记可能会有所帮助。另一种可能性是:

      // 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()); 
                }
    

答案 1 :(得分:2)

如果你正在使用jQuery

你可以在你的AJAX成功回调中使用jQuery.trim(responseData)来摆脱空格

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

希望有所帮助

答案 2 :(得分:1)

我修正了这些

  1. 确保在开幕前没有任何内容
  2. 确保关闭后没有尾随字符/行 ?&GT;
  3. 检查是否有?&gt;标签存在于代码行中的某处 (按照你的__construct中的流程和你调用的东西)

答案 3 :(得分:1)

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

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

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

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

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

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