Ajax POST请求,parseerror

时间:2016-04-19 16:28:28

标签: php jquery ajax

我正在尝试创建一个网络聊天室,但当我向服务器发送一个帖子请求时,使用以下代码:

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;
                    }
                }

现在它工作正常。

3 个答案:

答案 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}