[jquery] $ .each를 사용하여 Json 데이터의 jquery 루프

data라는 변수에 다음 JSON이 반환되었습니다.

이것은 겟트 된 JSON입니다 …

[
{"Id": 10004, "PageName": "club"},
{"Id": 10040, "PageName": "qaz"},
{"Id": 10059, "PageName": "jjjjjjj"}
]

$ .each를 사용하여 컬렉션을 반복하려고하지만 경고가 정의되지 않은 문제가 발생합니다. 나는 많은 다른 구문을 시도했지만 이것을 알아낼 수없는 것 같습니다.

내가 사용하는 JQuery는

$.each(data, function(i, item) {
    alert(item.PageName);
});

어느 쪽이 올바른 방향으로 나를 가리킬 수 있습니까?

편집
이것은 데이터를 얻는 데 사용하는 코드입니다

$.getJSON('/Cms/GetPages/123', null, function(data) {
  fillSelect(data);
});

이것은 콜백시 호출되는 함수입니다.

function fillSelect(data) {
  alert(data);
  $.each(data, function(i, item) {
    alert(item.PageName);
  });
}

편집 2
이것은 내가 가지고있는 것처럼 작동 해야하는 문서에 따르면 약간 혼란 스럽지만 그렇지 않습니다. 피들러에 따르면 헤더는 다음과 같이 표시됩니다.

Content-Type: application/json; charset=utf-8

그리고 JSON은 위에서 정확히 정확합니다. 이것이 다른 경우 크롬을 사용하고 있습니다. IE와 FF에서 테스트합니다 ….

편집 3

$ .get을 사용하면

"[\r\n {\r\n \"Id\": 10041,\r\n \"PageName\": \"01234567890\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10001,\r\n \"PageName\": \"about\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10056,\r\n \"PageName\": \"fdgdfgdfg\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10052,\r\n \"PageName\": \"hjkhjk\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10059,\r\n \"PageName\": \"jjjjjjj\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 1\r\n },\r\n {\r\n \"Id\": 10057,\r\n \"PageName\": \"qqqqq\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n },\r\n {\r\n \"Id\": 10054,\r\n \"PageName\": \"qwqw\",\r\n \"MetaId\": 1000,\r\n \"TemplateId\": 2\r\n }\r\n]"



답변

var data = [
 {"Id": 10004, "PageName": "club"},
 {"Id": 10040, "PageName": "qaz"},
 {"Id": 10059, "PageName": "jjjjjjj"}
];

$.each(data, function(i, item) {
    alert(data[i].PageName);
});

$.each(data, function(i, item) {
    alert(item.PageName);
});

이 두 가지 옵션은 다음과 같은 것이 없으면 잘 작동합니다.

var data.result = [
 {"Id": 10004, "PageName": "club"},
 {"Id": 10040, "PageName": "qaz"},
 {"Id": 10059, "PageName": "jjjjjjj"}
];

$.each(data.result, function(i, item) {
    alert(data.result[i].PageName);
});

편집하다:

이것으로 시도하고 결과를 설명하십시오

$.get('/Cms/GetPages/123', function(data) {
  alert(data);
});

편집 3 :

이렇게하면 문제가 해결되지만 “eval”을 사용하려는 아이디어는 아닙니다. ‘/ Cms / GetPages / 123’의 응답이 어떻습니까?

$.get('/Cms/GetPages/123', function(data) {
  $.each(eval(data.replace(/[\r\n]/, "")), function(i, item) {
   alert(item.PageName);
  });
});


답변

데이터를 문자열에서 JavaScript 객체로 변환 했습니까?

data = eval('(' + string_data + ')'); 또는 더 안전하거나 사용 하여 수행 할 수 data = JSON.parse(string_data);있지만 나중에 FF 3.5 또는 json2.js 를 포함하는 경우에만 작동합니다

1.4.1 이후 jQuery에는 그 기능도 있습니다 $.parseJSON().

그러나 실제로 $.getJSON() 는 이미 구문 분석 된 json 객체를 제공해야하므로 모든 것을 철저히 확인해야합니다 .json에 무언가를 인용하지 않았거나 대괄호 중 하나가 누락 된 것처럼 어딘가에 묻힌 실수가 거의 없습니다.


답변

getJSON은 올바른 content-type이 사용되는 한 데이터를 JSON으로 평가합니다. 서버가 애플리케이션 / json으로 데이터를 리턴하는지 확인하십시오.


답변

$.each(JSON.parse(result), function(i, item) {
    alert(item.number);
});


답변