2016-04-19 72 views
0

我試圖做一個網絡聊天室,但是當我發送POST請求到服務器,使用此代碼:阿賈克斯POST請求,parseerror

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錯誤函數中得到這個錯誤信息: 「Error:parseerror」。我多次查看代碼,但是我不知道問題出在哪裏。 在此先感謝

謝謝大家的快速解答 我檢查從服務器返回的值,我undertood這是一個服務器端的問題。 returnded值:

警告:爆炸()預計參數2爲字符串,陣列中X給出:\ WWW \根\腳本\ engine.php
{「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; 
        } 
       } 

現在我t的工作正常。

+0

不確定它很重要,但從php中刪除中斷。也調試$日誌,確保它是在有效的json編碼。 – Mihai

+0

我該怎麼辦? –

+0

Thx我將編輯代碼 –

回答

0

parseerror只是意味着你沒有從服務器獲取JSON。它可能是PHP拋出一個錯誤,並在json之前打印錯誤標記。

檢查控制檯以查看服務器實際返回的內容。

在嘗試寫入文件之前,您可能希望檢查is_writable()。它可能是一個簡單的權限問題。

+1

消息和時間參數只有當我設置方法postMsg,但在代碼它被設置爲getMsg –

+0

哎呀,錯過了.. –

+0

仍然,我們都只是猜測,直到你告訴我們什麼是實際上由服務器返回。有人可能會正確猜測,但你真的應該包括所有相關的信息。 –

0

變化

print_r(json_encode($log)); 

echo json_encode($log); 
0

謝謝大家的快速解答
我檢查從服務器返回的值,我undertood這是一個服務器端的問題。 返回值:

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