У меня есть следующий код на моей странице PHP, который получает сообщение от клиента и сохраняет его в файле журнала на сервере. Эта функция вызывается функцией jjery 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);
}
});
});
Я удалил заголовок («content-type: application / json»); и тип данных: «json» в функции AJAX и обнаружил, что данные запутаны ошибочными данными, отправленными сервером ZEND, на котором я выполняю отладку. Ошибка:
«
Предупреждение: session_start (): не может отправить кеш сессии
ограничитель — заголовки уже отправлены C: \ Program Files
(X86) \ Zend \ Apache2 \ HTDOCS \ ChatServer \ post.php онлайн 2
Предупреждение: Невозможно изменить информацию заголовка — заголовки
уже отправлено C: \ Program Files
(X86) \ Zend \ Apache2 \ HTDOCS \ ChatServer \ post.php онлайн
179
[{ «Сообщение»: «1»}]
Итак, я понимаю, что, по-моему, я испортил заголовки из-за ошибки отладчика ZEND, которая мешает моим данным JSON (добавлено в конце ошибки)? Что дает? Спасибо за ваше время и терпение.
добавлять ob_start();
в первой строке вашего скрипта, если вы не можете переместить header("content-type:application/json");
в начало страницы по какой-то причине.
Вы не можете изменять заголовки, поэтому переместите свой код вверх страницы:
header("content-type:application/json");
Верх означает верх обработанной страницы, а не вершину функции.
С уважением