2016-12-20 3 views
0

サーバー側のコード:としてクライアントがJSonを解析できません。何が問題なのですか?

{ '{"type":"type","age":32,"married":false}': '' } 

クライアント側:サーバー側が正常に受信され

app.post('/', function(req, res, next) { 
    console.log(req.body); 
    res.json({ "a": "128", "b": "7" }); 
}); 

、として印刷サーバから取得し、応答後

  $.ajax({ 
        type: "POST", 
        url: self.serverURI, 
        data: JSON.stringify(self.gen_data()), 
        dataType: 'json', 
        success: function (result) 
        { 
          //alert(result); 
          alert(JSON.parse(result)); 
        }, 
        error: function (xhr, ajaxOptions, thrownError) 
        { 
          console.log(xhr); 
        } 
       }); 

    self.gen_data=function() 
    { //create request data 
     var obj = new Object(); 
     obj.type = "type"; 
     obj.age = 32; 
     obj.married = false; 
     return obj; 
    } 

alert(result); 

はそう

[object object] 

を示し、私はそれを解析できなかったと仮定すると、

alert(JSON.parse(result)); 

なし警告ポップアップを解析してみてください。 内部に配列を含むJSonデータを交換したいのですが、これらの単純なテストは機能しません。

何が問題ですか?誰も私に説明することができますか?

ありがとうございます!

+0

あなたはいくつかのJDotherが必要です:)) – madalinivascu

+1

文字列ではなく解析結果を受け取っているようです。 –

+1

「alert(result.a);」または「alert(JSON.stringify(result))」 – shakib

答えて

1

あなたは

alert(result); 

を書いて、あなたはそのようにブラウザが舞台裏でそれを解析JSONにcontent-typeを設定res.jsonを使用する場合

[object object] 

を受け取った場合。

したがって、応答が既に解析されているため、JSON.parse(...)を使用する必要はありません。

は、この目的のためにalertを使用しますが、console.log()を使用しないようにしてください(誰かがJSON.parse(..)をしたと思います)通常のオブジェクトとして使用してください。コンソールには、オブジェクトとそのプロパティが表示されます。

+0

リクエストを送信する際には、 "JSON"が必要です。"res.json(json-data)"でレスポンスを送信するとJSonオブジェクトとしてクライアントに送られますが、それは正しいですか? – arslan

+1

@alim yes、 content-type'はjsonです。それは文字列化し、それを舞台裏で解析します – Alon

3

最初にconsole.log(typeof result)のようなデータの種類を確認してください。結果がオブジェクトまたは文字列の場合は、要件に従って処理してください。

関連する問題