1

私のアプリケーションでは、 Uncaught SyntaxError: Unexpected token : getJSON を使用してサーバーから JSON を取得すると、エラーが発生します。

これは私が使用する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 ではありません。

4

2 に答える 2

1

予期しないトークンは ではありません。そのメッセージ:の に続く空白です。:

内部オブジェクトの最後のコンマを削除する必要があります。特に Internet Explorer は、これらの末尾のコンマに反対します。コンマは「他に何かがある」という意味のように見えますが、他のブラウザは「これで終わりです」という意味でコンマを使用します。

使用json_encodeしているため、自動的に処理する必要があるため、悪いデータをフィードしている可能性があります。クエリから返されたデータを確認してください。おそらく空の行はありませんか?

于 2012-05-09T07:18:02.560 に答える
0

getemployees.php にapplication/json、プレーン テキストの代わりにコンテンツ タイプを強制的に出力させます。

于 2012-05-09T06:52:40.083 に答える