我正在尝试创建一个网络聊天室,但当我向服务器发送一个帖子请求时,使用以下代码:
var line_count = 0;
$.ajax({
type: 'POST',
url: '../scripts/engine.php',
data: {'method': 'getMsg', 'line_count': line_count},
dataType: 'json',
error: function(request, error) {
alert('Error: '+error);
},
success: function(data) {
$.each(data.messages, function(i, val) {
$('.messages').append(val);
});
line_count = data.srv_count;
}
});
和
<?php
$method = $_POST['method'];
switch($method) {
case 'postMsg':
$sender = $_SESSION['username'];
$message = $_POST['message'];
$time = $_POST['time'];
fwrite(fopen('chat.txt', 'a'), '<div class="time">[' . $time . ']</div><div class="nickname">' . $sender . '</div>' . $message . "\n");
break;
case 'getMsg':
$log = array();
if(file_exists('chat.txt')) {
$usr_count = $_POST['line_count'];
$srv_msg = explode("\n", file('chat.txt'));
$srv_count = count($srv_msg);
$log['srv_count'] = $srv_count;
if($usr_count < $srv_count) {
$i = 0;
while(list($key, $val) = each($srv_msg)) {
if ($i > $usr_count) {
$log['messages'][i] = $val;
}
$i = $i+1;
}
}
} else {
$log = false;
}
echo json_encode($log);
break;
}
?>
然后我从ajax错误函数中收到此错误消息: “错误:parseerror”。我多次检查代码,但我没有看到问题出在哪里。 提前致谢
感谢大家的快速回答
我检查了服务器的返回值,我认为这是一个服务器端问题。退货价值:
警告:explode()期望参数2为字符串,数组在 X:\ www \ root \ scripts \ engine.php 中的 17 中给出>
{ “srv_count”:0}
我刚把我的代码编辑成:
$usr_count = $_POST['line_count'];
$srv_msg = explode("\n", file_get_contents('chat.txt'));
$srv_count = count($srv_msg);
$log['srv_count'] = $srv_count;
if($usr_count < $srv_count) {
$i = 0;
while(list($key, $val) = each($srv_msg)) {
if ($i > $usr_count) {
$log['messages'][$i] = $val;
}
$i = $i+1;
}
}
现在它工作正常。
答案 0 :(得分:0)
parseerror只是意味着你没有从服务器上获取JSON。它可能是PHP抛出错误并在json之前打印错误标记。
检查控制台以查看实际从服务器返回的内容。
您可能希望在尝试写入文件之前检查is_writable()
。这可能是一个简单的权限问题。
答案 1 :(得分:0)
更改
print_r(json_encode($log));
到
echo json_encode($log);
答案 2 :(得分:0)
感谢大家快速回答
我检查了服务器的返回值,我认为这是一个服务器端问题。
退货价值:
<br />
<b>Warning</b>: explode() expects parameter 2 to be string, array given in <b>X:\www\root\scripts\engine.php</b> on line <b>17</b><br />
{"srv_count":0}