2012-04-24 110 views
0

我對於新手,這樣下去容易:JSON數據對象不會追加

我想不通爲什麼這個$就功能將不是我的XHR數據追加到正確的位置。

// gets the cache data from our php file 
function getcaches() { 
    $.ajax({ 
     method: 'get', 
     url: "php/findcache.php", 
     dataType: "json", // return type data is json 
     success: function(data){ // <-- data is in json format 
      //parse the json data 
      $('#caches').append($('<p>' + data[0].name + '</p>')); 
     }, 
     error: function(data) { 
      console.log('error'); 
     } 
    }); 
    return false; 
} 

這就是相關的javascript。我知道數據被正確地存儲在對象,因爲我可以看到螢火蟲吧...

[OU0397] => stdClass Object 
    (
     [code] => OU0397 
     [name] => A Mighty Oak in the Open 
     [location] => 28.527633|-81.125167 
     [type] => Virtual 
     [status] => Available 
    ) 

我只是不明白我在做什麼錯。任何指針?

+0

你爲什麼認爲你有'[0]'? – 2012-04-24 01:49:56

+2

它是數據[0] .name還是data.name? – 2012-04-24 01:50:14

+0

我已經試過了,既不給我回應 – pizoelectric 2012-04-24 01:57:11

回答

1

如果你有Firebug的,你在這裏設置一個斷點:

$('#caches').append($('<p>' + data[0].name + '</p>')); 

然後你檢查data。您的調試數據顯示OU0397是關鍵;由於PHP的json_encode,這意味着你可能會給字典。字典以不同的方式遍歷(例如for i in data { ... })。

你也可以考慮改變你的PHP返回第一個結果;這可以簡化您的JavaScript並降低網絡開銷(例如,使用json_encode(current($data)))。

2

代碼示例具有XSS漏洞(如果名稱中包含「<」字符,該怎麼辦?)。

如果沒有正確的HTML編碼,請勿將文本值添加到HTML中。您可以使用jQuery的text()方法來設置元素文本,而不是串聯字符串。

$('#caches').append($('<p/>').text(data[0].name)); 

這可能是您輸出錯誤的原因之一。

您可以通過執行$('#caches')來調試Firebug或Chrome開發人員工具中的jQuery CSS選擇器,它將返回一個匹配元素數組。