2013-04-29 72 views
0

我需要一些幫助。我發送簡單的請求到服務器,並且我期望的返回值是JSON作爲數據類型。但是當我檢查開發工具控制檯日誌時,我得到「parsererror SyntaxError {}」和「parsererror」。語法錯誤{} AJAX成功無法讀取PHP返回的JSON

我該如何解決這個問題?以下是代碼。

JQuery的

$(':submit').live('click', function() { 

    $.ajax({ 

      type : 'post',   
      url: 'testJSON.php', 
      beforeSend:console.log('sending...'), 
      dataType: 'json', 
      contentType: "application/json; charset=utf-8", 
      success: function(data){ 

       console.log(data.status); 
       // do magic 
       }, 

      error: function(XMLHttpRequest, textStatus, errorThrown) { 

       console.log(textStatus, errorThrown); 

       }, 

      complete: function(XMLHttpRequest, status) { 

       console.log(status); 

       } 

     }); 

    return false; 
    }); 

,這是testJSON.php

<?php 

$data = array(

    "status" => 1, 
    "firstname" => "foo", 
    "lastname" => "bar", 

); 

header('Content-type: application/json; charset=utf-8" '); 
echo json_encode($data); 


exit(); 

?> 

僅供參考我使用最新版本的WAMP的。非常感謝任何幫助。

+0

請注意,您的JSON無效,並且您已發佈除JSON之外的所有內容;-) – 2013-04-29 11:03:37

+0

@ÁlvaroG.Vicario我不確定您的無效JSON是什麼意思......如果你的意思是爲什麼我發送請求到服務器沒有JSON,只是因爲需要運行PHP腳本的數據存儲在$ _SESSION [] – ani 2013-04-29 14:28:12

+0

你說你得到'parsererror'時解析JSON ...對不起,如果我誤解了。 – 2013-04-29 15:05:37

回答

0

從這裏

header('Content-type: application/json; charset=utf-8" '); 

刪除"應該

header('Content-type: application/json; charset=utf-8'); 
+0

通過設置'dataType:'json''數據已被(企圖)解析 – 2013-04-29 10:57:29

+0

@GeenHenk是的我注意到,謝謝你糾正錯誤... :) – 2013-04-29 11:00:44

+0

@GeenHenk我已經刪除它,但仍然得到parsererror SyntaxError { }在我的日誌中... – ani 2013-04-29 14:12:50

1

設置內容類型的JSON的頭......這裏是設置頭型的例子。

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

在jQuery 1.4以上版本中,JSON數據以嚴格的方式被解析。

任何格式錯誤的JSON都會被拒絕並引發解析錯誤。

+0

我正在使用jQuery 1.8.3。我嘗試這個解決方案,但代碼仍然無法正常工作。我運行php腳本的預覽數據成功轉換爲JSON類型,我不明白爲什麼AJAX無法接收它,有什麼想法? – ani 2013-04-29 14:38:11

0

我試過你的代碼,並且在beforeSend參數中出現錯誤。聲明應封裝在一個函數中:

...  
beforeSend: function() {console.log('sending...')}, 
... 

之後,一切正常。也許它也取決於jQuery版本。你使用了哪一個?我嘗試過版本1.8.1及以上版本

+0

我正在使用V 1.8.3。和代碼爲我工作..原因我使用這個參數,以便我知道AJAX工作的第一個地方(以及代碼是... beforeSend:console.log('發送...')。 .. without function(){}) – ani 2013-04-29 14:05:04