我使用ajax请求向DB发送评论。成功响应由标记
1. OK
实际上问题是php脚本的响应是
1.
2. OK
因此,我调试了脚本,并注意到当脚本执行以下行时添加了换行符si:
require_once($ABS_APPS."/quotes/classQuote.php");
经过一些搜索,我发现这可能是一个BOM(字节顺序标记)问题。所以我只是下载并用十六进制编辑器打开了classQuote.php
文件,并注意到没有BOM。。。有人能帮我吗?
附言:我项目中的所有文件都是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;
- 确保在类Quote.php中打开
<?php
之前没有任何内容 - 确保关闭
?>
后没有尾随字符/行 - 检查代码行中是否存在
?>
标记(遵循__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/
希望它能帮助
我也面临同样的问题。我找到的最终解决方案是遵循
-
检查加载到您发送AJAX请求的文件中的所有文件
-
从第一行
<?
和PHP起始标记中删除多余的空格。如果文件从第1行开始,则第一个字符应该是<?
。 -
如果它们是PHP文件,那么不要在末尾添加
?>
。 -
尽量将最后一行标记保留到所写代码的最后一行。意味着不要在文件末尾添加额外的空格。如果代码在第32行结束,请不要通过编辑器转到第33行。事实上,按下后退按钮,清除下面的所有内容,直到第32行。
-
如果您使用的是任何PHP框架,那么请确保加载的所有文件的层次结构都不会出现相同的问题。例如,如果您使用的是codeigniter框架,那么他们确保调用函数的控制器和加载到该控制器中的所有模型不应该有相同的问题。
我被这些修复了
- 确保在开场前没有任何东西
- 确保结束后没有尾随字符/行?>
- 检查是否有?>标记存在于代码行中的某个位置(遵循__construct中的流程以及调用内容的位置)