2017-10-23 23 views
0

を受けましたが、私は、WebページからREST上でJSONファイルを要求するために、この短いコードを書いている:予期しない終了応答が

<!DOCTYPE html> 

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta charset="utf-8" /> 
    <title></title> 
</head> 
<body> 
    <button type="submit" onclick="UserAction()">Search</button> 

    <script type="text/javascript" language="javascript"> 
    function UserAction() { 
    var xhttp = new XMLHttpRequest(); 
    xhttp.open("POST", "http://date.jsontest.com/", true); 
    xhttp.setRequestHeader("Content-type", "application/json"); 
    xhttp.send(); 
    var response = JSON.parse(xhttp.responseText); 
    document.write(response); 

    } 
    </script> 
</body> 
</html> 

しかし、ChromeでJavaスクリプトコンソールで、私は次の取得エラー:

VM33:1 Uncaught SyntaxError: Unexpected end of JSON input 
at JSON.parse (<anonymous>) 
at UserAction (HTMLPage1.html:17) 
at HTMLButtonElement.onclick (HTMLPage1.html:9) 

しかし、私は、コンソールでのネットワーク応答を確認したときに、私が正しい次の形式で応答を見ることができますが、それはまた、Webページに表示されていない:

{ 
    "time": "02:08:35 PM", 
    "milliseconds_since_epoch": 1508767715990, 
    "date": "10-23-2017" 
} 

この問題の原因は何もわかりません。どのように修正するのか知っていますか?

+0

を使用しています。 – Mouser

答えて

2

xhttp.send();は非同期です。これは、あなたがJSON.parse(xhttp.responseText);をしたときに、まだ応答に何もないことを意味します。イベントを使用する必要があります。

xhttp.onreadystatechange = function() {//Call a function when the state changes. 
    if(xhttp.readyState == 4 && xhttp.status == 200) { 
     var response = JSON.parse(xhttp.responseText); 
     document.write(response); 
    } 
} 
-1

最初JSON.stringify()でJavaScriptオブジェクトを文字列に変換します。 はその後も `document.write`は、デバッグのため、おそらくですが、あなただけにconsole.logを使用する必要がありますJSON.parse

var responseText = { 
 
    "time": "02:08:35 PM", 
 
    "milliseconds_since_epoch": 1508767715990, 
 
    "date": "10-23-2017" 
 
}; 
 
var response = JSON.stringify(responseText); 
 
var result = JSON.parse(response);; 
 
console.log(result);

+0

なぜあなたはこれをしますか?オブジェクトをJSON文字列に変換してこの場合に戻っても値はありません... –

+0

これは絶対に価値がありません... AJAX呼び出しが唯一の失敗点である間に完全に削除しました... – Salketer

関連する問題