2014-02-05 60 views
0

我想從頭開始使用jQuery建立一個網絡聊天。我現在可以成功將消息發送給我的(也是自建的)API,現在我想輪詢新消息。我使用下面的函數執行此操作。問題是,我似乎無法對返回的json做任何事情。我試過JSON.parse()jQuery.parseJSON(),但他們都沒有工作。根本沒有警報彈出。當我使用簡單的alert("with a simple string here");它確實有效,所以它確實達到了成功的程度。如何顯示jquery POST請求的結果?

function updateConversation(){ 
    if(!instance) { 
     instance = true; 
     $.ajax({ 
       type:"POST", 
       contentType: "application/json", 
       accepts: "application/json; charset=utf-8", 
       url: "/api/support/" + "1", 
       data: JSON.stringify({ 
        'action': 'GET_MESSAGES', 
        'user_id': user_id, 
        'last_message_id':last_message_id 
       }), 
       dataType: "json", 
       success: function(data) { 
        var usingjsonparse = JSON.parse(data); 
        alert(usingjsonparse.messages); 
        var usingjqueryparse = jQuery.parseJSON(data); 
        alert(usingjsonparse.messages); 
        if (data.text) { 
         for (var i=0; i< data.text.length; i++) { 
          $('#conversation').append($("<P>"+ data.text[i])); 
         } 
        } 
        document.getElementById('conversation').scrollTop = document.getElementById('conversation').scrollHeight; 
        instance = false; 
        // last_message_id = data.id; 

       } 
      }); 
    } else { 
     setTimeout(updateConversation, 1000); 
    } 
} 

我想到JSON的是這樣的:

{"messages": [{"is_supporter": True, "text": u"aergaerg", "id": 1, "created": "1391609527"}, {"is_supporter": True, "text": u"eargaerg", "id": 2, "created": "1391609551"}, etc.]} 

有誰知道我怎麼可以查看數據的原始字符串被退回?我試過data,data.messages,data.messages[0],和一個十億其他變化,但無濟於事。當我alert(typeof(data));我得到object

有人知道我在做什麼錯嗎?歡迎所有提示!

PS。有沒有人知道更簡單的方法來看看發生了什麼,而不是總是提醒一切?

+0

'data.responseText'。拯救自己的痛苦和小故障的世界,並建立在Meteor.js。 –

+1

當你傳遞'dataType:'json'到函數時,響應已經被解析。你有沒有嘗試過看開發人員工具中的'data'對象? – Phylogenesis

+0

您正在返回的響應已被解析爲json,因爲您設置了'dataType:json'您應該執行'console.log(data)'來查看您當前正在返回的內容 – Ibu

回答

0

問題1:

您有:

dataType: "json" 

這告訴jQuery的忽視是服務器的說,響應,並把它當作JSON。它將解析它並將其轉換爲對象。

然後,你必須:

var usingjsonparse = JSON.parse(data); 

這將對象轉換爲字符串(如"[Object object]"),並嘗試解析爲JSON,它不是。

你應該做的是讓服務器返回適當的內容類型(application/json),不提及JSON.parser而不提及dataType


問題2:

{'messages': [{'is 

...是不是JSON。 JSON字符串必須由"字符分隔。你也有其他一些錯誤。它看起來像一個字符串化的Python對象。在將它發送到瀏覽器之前,將它通過JSON串行器推送。


有誰知道我怎麼可以查看數據的原始字符串被退回?

原始字符串將通過Net選項卡中的瀏覽器的開發人員工具可見。

您可以通過console.log(data)查看傳入函數的內容。

+0

關於問題2:對不起,我在python之前複製了json的「json」。我現在就改變它。 – kramer65