2012-08-09 36 views
0

我想發送JSON格式的瀏覽器來顯示。 但它似乎不會瀏覽器加上有像req.write部分的錯誤。 訪問網址是127.0.0.1:3000/media=video 我可以訪問服務器,但它不會返回JSON到瀏覽器。爲什麼它不會返回JSON到瀏覽器

var http = require('http'); 
var recommandCat=['top5','newest','like','random','recommened']; 
var url =require('url'); 


http.createServer(function (req, res) { 
    var url_parts = url.parse(req.url, true); 
    var query = url_parts.query; 
    var returnJson=""; 
    console.log(query.media); 
    switch (query.media) 
    { 
    case 'photo': 
     returnJson=photoGenerator(); 
     break; 
     case 'video': 
     returnJson=videoGenerator(); 
     break; 
     case 'audio': 
     returnJson=audioGenerator(); 
    } 


    console.log(returnJson); 
    res.write(returnJson); 


     }).listen(3000, '127.0.0.1'); 


    function videoGenerator() 
    { 
    var jsonArray = new Array(); 
    for(i=0;i<10;i++) 
    { 
    var data = new Object();   
    var recoCat = recommandCat[Math.floor(Math.random()*4)];   
    data = { 
        tomEngine:{ 
        mediaType:"video", 
         recommendset:[ 

                {recommendCat:"+recoCat+", 

                recommendResult:[ 

                { 

                mediaId:"", 

                mediaEntry:[{ 
                 user1:{ 
                    name:"sooin", 
                    rating:"3", 
                    views:"2", 
                    like:"ture", 
                    comment:"good"         
                 }, 
                 user2:{ 
                    name:"sara", 
                    rating:"1", 
                    views:"4", 
                    like:"ture", 
                    comment:"good!"         
                 }          
                 }], 
                view:"4", 
                rating:"4", 
                like:"10", 
                attribute:{ 
                    smallUrl:"www", 
                    largeUrl:"llll", 
                    title:"aaaa" 
                }, 
              }]             
               } 
         ] 
        } 
     }; 
     jsonArray.push(data); 
} 

return jsonArray; 
} 

也許我的json格式是錯誤的。 謝謝。

+1

貫穿你的輸出:http://jslint.com/它會告訴你你錯過了什麼。對於初學者來說,名稱值對中的所有名稱都需要在它們周圍加雙引號。 – scrappedcola 2012-08-09 21:01:26

+6

'JSON.stringify(returnJSON)'看起來你需要在調用'res.write'之前將它編碼爲字符串。 – 2012-08-09 21:03:18

+0

@ S.Albano是正確的,http服務器不會自動將javascript對象轉換爲json。你必須手動編碼它們。我會把這個問題作爲對OP問題的回答。 @draford,你也錯過了'res.end()'。如果不調用它,服務器將永遠不會關閉連接(直到瀏覽器發生超時)。 – travis 2012-08-09 21:55:50

回答

0

您可能需要向客戶端發送正確的Content-Type標題。 也response.end() should be called in the end of each response

var body = JSON.stringify(returnJson); 

res.writeHead(200, { 
    'Content-Length': body.length, 
    'Content-Type': 'application/json' 
}); 

res.write(body); 
res.end(); 

此外,如果您迴應的身體不是分塊,你只能使用到Response.End方法()一樣

res.end(body); 
相關問題