我的PHP页面上有以下代码,它从客户端获取消息并将其存储在服务器上的日志文件中。该函数由jquery AJAX函数调用(如下所示)。 AJAX请求正确发送数据,PHP代码工作正常。但是当发回对AJAX请求的响应时,页面突然重定向到index.php(我的主页):
PHP代码
function store_chat_msg_function()
{
//Check if session is active
if(isset($_SESSION['NAME']))
{
$data = $_POST;
$text = $data["message"];
$filepath = $data["filepath"];
$fp = fopen($filepath, 'a');
fwrite($fp, "<div class='msgln'>(".date("g:i A").") <b>".$_SESSION['NAME']."</b>: ".stripslashes(htmlspecialchars($text))."<br></div>");
fclose($fp);
//Push data array to be sent into array
$json = array();
$bus = array(
'message' => "1"
);
array_push($json, $bus);
//Encode to JSON format
$jsonstring = json_encode($json);
//Specify type of data being sent
header("content-type:application/json"); //<-----(error:line 179)
//Finally send the data
echo $jsonstring;
}
else
{
}
}
AJAX功能是:
//On submit message
$("#submitmsg").click(function(){
var ptarget = $(this).html();
//get some values from elements on the page:
//Set parameters...
var clientmsg = $("#usermsg").val();
//Clear the text box
$("#usermsg").val("");
var data = {
"action": "send_chat_msg",
"message": clientmsg,
"filepath": globalrefreshfile
};
data = $(this).serialize() + "&" + $.param(data);
//Send the data using post and put the results in a div
$.ajax({
url: "post.php",
type: "POST",
data: data,
datatype: "json",
success: function(data) {
if(data[0].message!="1"){
alert("Message was not sent.");
}
},
error: function(jqXHR, textStatus, errorThrown) {
alert(jqXHR.status);
alert(errorThrown);
$("#chatbox").html('There was an error updating chat window');
$("#chatbox").fadeIn(1500);
}
});
});
我删除了标题(&#34; content-type:application / json&#34;);和数据类型:&#34; json&#34;在AJAX函数中,发现数据被ZEND服务器发送的错误数据搞糊涂了。错误是:
&#34;
警告:session_start():无法发送会话缓存 限制器 - 已在 C:\ Program Files中发送的标头 (x86)\ Zend \ Apache2 \ htdocs \ ChatServer \ post.php 在线 2
警告:无法修改标题信息 - 标题 已经在 C:\ Program Files中发送 (x86)\ Zend \ Apache2 \ htdocs \ ChatServer \ post.php 在线 179
[{&#34;消息&#34;:&#34; 1&#34;}]
所以我理解我认为我可能根据ZEND调试器错误搞砸了标头,这会干扰我的JSON数据(在错误结束时附加了)?是什么赋予了?感谢您的时间和耐心。
答案 0 :(得分:2)
如果由于某种原因无法将ob_start();
移到页面顶部,请添加header("content-type:application/json");
作为脚本的第一行。
答案 1 :(得分:1)
您无法修改标题,因此请将代码移至页面顶部:
header("content-type:application/json");
Top表示proccessed页面的顶部,而不是函数的顶部。
此致