2011-07-23 49 views
1

我看了與此相關的其他問題,但還沒有找到的東西,回答我的(第一個!)問題與Ajax請求的頁面:Django的序列化JSON工作在控制檯上,而不是在

我m序列化一個django視圖並用ajax(jquery)發送給服務器。我收到序列化的數據(包括警報進行了測試並獲得了JSON數據,200 OK效應初探),但我無法得到以下就成功而努力:

$('div#nextSet' + currentLetter).click(function(){ 
     var output = ''; 
      $.ajax({ 
       url: 'path/to/django/view', 
       data: {'data':sentToServer}, 
       datatype: 'json', 
       error: function(xhr_data) { 
        display_error(); 
       }, 
       success: function(data) { 
        $.each(data, function(i){ 
         var firstName =data[i].fields.first_name; 
         var lastName = data[i].fields.last_name; 
         var portrait = data[i].fields.portrait; 
         var output = '<ul><li>' + firstName + ' ' + lastName + '</li>'; 
         output += '<li><img src="' + portrait + '" /></li></ul>'; 
         alert(output); 
        }); 
       } 
      }); 
     }); 

這段代碼在谷歌Chrome和Firefox的工作在控制檯(警報顯示帶有示例html),但無法在頁面上運行。我收到以下錯誤:
未捕獲TypeError:無法讀取未定義的屬性'first_name'。

我已經試過控制檯查看如何訪問的JavaScript地圖/字典的項目,我能夠進入以下時,得到的值,與實際數字替換: 數據[數字]點域。 first_name 該值顯示在控制檯中,並且不顯示任何錯誤消息。

這是從單個項目的django視圖返回的數據樣本: var data = [{「pk」:8,「model」:「app.model」,「fields」:{「portrait 「:
」this/is/the/photo/path.png「,」first_name「:」First「,」last_name「:」LastName「}},]。

所有這些都嵌入在成功代碼中,這意味着什麼都不應該執行(?),除非回調可用。因此,如果數據存在 - 當警報(數據)正在工作,並且我從服務器獲得200 OK響應 - 並且代碼在控制檯中工作 - 意味着警報已處理並顯示,是否有某些我可以忽略?

+0

感謝@Storm指着我用的console.log正確的方向內。 ajax的參數應該是* dataType *,而不是* datatype *。所以它將它解釋爲字符串而不是JSON。這顯然沒有顯示在控制檯中,因爲它被正確識別爲JSON對象!感謝您的幫助... – clekstro

回答

0

事實上,您得到「Uncaught TypeError:無法讀取未定義的屬性'first_name'」。表明該字段未在數據上定義,但實際上您獲得了該數組中的對象。

一個想法可能是打印數組對象的控制檯統計信息。

只需添加:

console.log(data[i]) 

直接在每個功能

的原因可能與this

+0

我已經將代碼添加到我的.each()函數中,但它幾乎鎖定了瀏覽器,將每個字符顯示在一個新行上(這是否正常?)。此外,這是否解決了在控制檯中定義數據變量並且完全相同的代碼被粘貼,執行併成功運行時它工作的原因? – clekstro

+0

@ frosch62那麼我的猜測是你的數據不是一個對象,而是一個字符串。如果你把console.log(data);設置爲「application/javascript」 – niklasdstrom

+0

@ frosch62,你有沒有設置mimetype?在你的成功功能中,它打印什麼?它是一個對象還是數據作爲一個字符串 – niklasdstrom

相關問題