2015-09-26 45 views
0

我有一些javascript代碼在更改下拉列表時發出ajax調用。它只是通過從下拉列表中選擇的值,並得到與所選擇的值的集合:Uncaught TypeError:無法使用'in'運算符搜索'161'

$("#ddl").change(function() { 
    $.ajax({ 
     type: "POST", 
     url: "/MyService.asmx/GetCollection", 
     data: "{'selectedId':'" + $(this).val() + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (response) { 
      $.each(response.d, function (i, item) { 
       alert(item.Text); 
      }); 
     } 
    }); 
}) 

這正常工作,這是JSON響應,我從我的AJAX調用得到。

d: 
    "[{"Id":"c709b6d3-5841-4240-b25c-9f730530a998","Text":"Item 1"}, 
     {"Id":"c7dd6ee0-836a-4b19-9b88-f8f2455b6e32","Text":"Item 2"}]" 

但是,當我在response.d和警報item.Text嘗試遍歷每個項目,我收到此錯誤信息:

Uncaught TypeError: Cannot use 'in' operator to search for '161' in [{"Id":"c709b6d3-5841-4240-b25c-9f730530a998","Text":"Item 1"},{"Id":"c7dd6ee0-836a-4b19-9b88-f8f2455b6e32","Text":"Item 2"}]

上午我通過這個錯誤的循環?還是我輸出的內容不正確?

+2

'response.d'是字符串,你不能在字符串中使用'each',將它解析爲JSON,然後使用'each'它 – Tushar

+0

@Tushar - 我可以在jQuery中做到嗎? – Steven

+3

使用'var d = JSON.parse(response.d)',然後在'd'上循環 – Tushar

回答

1

@Tushar中,你必須使用一個循環的評論中提及,例如for循環就像下面:

var response = {d: [{"Id":"c709b6d3-5841-4240-b25c-9f730530a998","Text":"Item 1"}, {"Id":"c7dd6ee0-836a-4b19-9b88-f8f2455b6e32","Text":"Item 2"}]}; 

for(var i=0;i<response.d.length;i++){ 
    alert(response.d[i].Text); 
} 

如果響應ID字符串中使用JSON.parse

var response = JSON.parse('{"d": [{"Id":"c709b6d3-5841-4240-b25c-9f730530a998","Text":"Item 1"}, {"Id":"c7dd6ee0-836a-4b19-9b88-f8f2455b6e32","Text":"Item 2"}]}') 

希望這有助於

相關問題