2012-05-09 224 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

相关问题