[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);
});