2012-05-09 77 views
0

在我的應用程序中,我得到一個Uncaught SyntaxError:意外的令牌:使用getJSON從服務器獲取JSON時。未捕獲的SyntaxError:意外的令牌::

這是我使用的JavaScript:

$('#employeeListPage').bind('pageinit', function(event) { 
    getEmployeeList(); 
}); 

setInterval ("getEmployeeList()", 10000); 
var vanhadata = ""; 

function getEmployeeList() { 
    $.getJSON(serviceURL + 'getemployees.php?autonumero=' + autonumero + 'callback=?', function(data) { 
     if(JSON.stringify(data) != JSON.stringify(vanhadata)){ 
      $('#employeeList li').remove(); 
      employees = data.key; 
      $.each(employees, function(index, employee) { 
       $('#employeeList').append('<li><a href="keikka.html?id=' + employee.IND + '">' + 
        '<h4>' + employee.OSO + '</h4>' + 
        '<img src="pics/' + employee.TILA + '.png"/>' + 
        '<p>' + employee.AIKA + '</p>' +'</a></li>'); 
     }); 
      $('#employeeList').listview('refresh'); 

      if(vanhadata != "") 
       alert("Uusia keikkoja!");  
      vanhadata = data; 
     } 
    }); 
} 

來自服務器的JSON響應似乎是正確的,但它顯示了錯誤,並且不顯示數據。控制檯還打印:"Resource interpreted as Script but transferred with MIME type text/html:"

這是JSON響應:

{ 
    "key": [ 
     { 
      "NIMET": "Tuntematon", 
      "PERHJAS": "0", 
      "SAATTAJA": "0", 
      "m_yht": "0", 
      "OSO": null, 
      "AIKA": "2010-03-11 10:00:00", 
      "OSOITELAJI": "0", 

     } 
    ] 
}UncaughtSyntaxError: Unexpectedtoken: 

而且getemployees.php:

<?php 
header('Content-Type: application/json; charset=UTF-8'); 

include 'config.php'; 

$number = $_GET['autonumero'] ; 

$sql = "select * from table where number=\"$number\""; 



try { 
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $dbh->query($sql); 
    $employees = $stmt->fetchAll(PDO::FETCH_OBJ); 
    $dbh = null; 
    echo '{"key":'. json_encode($employees) .'}'; 
} catch(PDOException $e) { 
    echo '{"error":{"text":'. $e->getMessage() .'}}'; 
} 


?> 

當修改PHP文件:

  if ($_GET['callback']) 
     print $_GET['callback']."("; 

    echo '{"key":'. json_encode($results) .'}'; 

    if ($_GET['callback']) 
     print ")"; 

} catch(PDOException $e) { 
    echo '{"error":{"text":'. $e->getMessage() .'}}'; 
} 

響應我得到的是:

<br /> 
<font size='1'><table class='xdebug-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'> 
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>(!)</span> Parse error: syntax error, unexpected T_CATCH in C:\Services\getemployees.php on line <i>40</i></th></tr> 
</table></font> 

所以它不是JSON。

+0

嘗試在[驗證器](http://jsonlint.com/)中運行您的JSON。另外,你可以發佈響應文本嗎? – Joseph

+0

它打印有效的JSON。 – user1323294

+0

JSON對Internet Explorer無效。 –

回答

0

迫使你getemployees.php打印的內容類型的application/json而非純文本

+0

我有頭('內容類型:應用程序/ JSON;字符集= UTF-8');在PHP文件中。刪除資源解釋爲腳本,但用MIME類型text/html:part傳輸,但仍顯示 未捕獲的SyntaxError:意外的令牌: – user1323294

+0

問題出在您的getemployees.php腳本,而不是JavaScript。你可以粘貼代碼嗎? –

+0

我已經編輯PHP到我的文章 – user1323294

1

的意外的標記不是:,它下面的郵件中的:空白。

您需要刪除內部對象中的最終逗號。 Internet Explorer特別反對這些尾隨逗號:它表示逗號的意思是「還有別的東西要來」,而其他瀏覽器使用逗號表示「那是這個結尾」。

因爲您使用json_encode應該自動處理,所以你可能會餵它壞數據。檢查查詢返回的數據:是否有空行,也許?

+0

'<?php'和'header'之間的空格不會做任何事情,空間必須是在'<?php'之前。 –

+0

@GGG。當然,你是對的。已移除爲不相關。 –

+0

似乎沒有任何空行 – user1323294

相關問題