AJAX 성공의 JSON 결과에 대한 jQuery 루프?


152

jQuery AJAX 성공 콜백에서 객체의 결과를 반복하고 싶습니다. Firebug에서 응답이 어떻게 보이는지에 대한 예입니다.

[
 {"TEST1":45,"TEST2":23,"TEST3":"DATA1"},
 {"TEST1":46,"TEST2":24,"TEST3":"DATA2"},
 {"TEST1":47,"TEST2":25,"TEST3":"DATA3"}
]

각 요소에 액세스 할 수 있도록 결과를 어떻게 반복 할 수 있습니까? 아래와 같은 것을 시도했지만 작동하지 않는 것 같습니다.

jQuery.each(data, function(index, itemData) {
  // itemData.TEST1
  // itemData.TEST2
  // itemData.TEST3
});

1
이 작동합니다. 정확히 동일한 코드와 동일한 데이터입니까?
Tamas Czinege 2009

답변:


255

외부 루프를 제거하고 다음으로 바꿀 수 this있습니다 data.data.

$.each(data.data, function(k, v) {
    /// do stuff
});

당신은 가까이 있었다 :

$.each(data, function() {
  $.each(this, function(k, v) {
    /// do stuff
  });
});

객체 / 맵 배열이 있으므로 외부 루프가 반복됩니다. 내부 루프는 각 객체 요소의 속성을 반복합니다.


첫 번째 루프는 "카테고리"를위한 것이고, 그 루프는 "속성"을위한 것입니다. 그게 또 어떻게 되나요?
dcolumbus

속성이 아닌 객체 요소로 작업하려면 어떻게해야합니까? 질문에서 @aherrick의 루프가 작동하지 않는 이유는 무엇입니까?
StuperUser

1
이 루핑이 별도의 함수 $(data)대신 datak
에을

2
누군가 두 번째 함수에 전달 된 변수 k & v를 설명 할 수 있습니까?
브렌트 코너

이 경우에 @BrentConnor k & v는 순환되는 어레이의 키와 값을 나타냅니다. jquery .each () 함수 읽기
Ghost Echo

80

getJSON 함수를 사용할 수도 있습니다 .

    $.getJSON('/your/script.php', function(data) {
        $.each(data, function(index) {
            alert(data[index].TEST1);
            alert(data[index].TEST2);
        });
    });

이것은 실제로 ifesdjeen의 답변을 다시 말한 것일 뿐이지 만 사람들에게 도움이 될 것이라고 생각했습니다.


도움이되었습니다. 어떤 이유로 나는 @cletus의 대답을 얻지 못했지만 이것이 효과가있었습니다. jQuery에 대한 대단한 신비가 무엇인지 확실하지 않지만 간단한 코드가 항상 예상대로 작동하지는 않습니다.
AturSams

38

Fire Fox를 사용하는 경우 콘솔을 열고 (F12 키 사용) 다음을 시도하십시오.

var a = [
 {"TEST1":45,"TEST2":23,"TEST3":"DATA1"},
 {"TEST1":46,"TEST2":24,"TEST3":"DATA2"},
 {"TEST1":47,"TEST2":25,"TEST3":"DATA3"}
];

$.each (a, function (bb) {
    console.log (bb);
    console.log (a[bb]);
    console.log (a[bb].TEST1);
});

그것이 도움이되기를 바랍니다


17

다른 사람 이이 문제를 겪고 있다면 ajax 호출이 반환 된 데이터를 텍스트로 해석하기 때문에 작동하지 않을 것입니다. 즉, 아직 JSON 객체가 아닙니다.

parseJSON 명령을 수동으로 사용하거나 단순히 ajax 호출에 dataType : 'json'특성을 추가하여이를 JSON 오브젝트로 변환 할 수 있습니다. 예 :

jQuery.ajax({
    type: 'POST',
    url: '<?php echo admin_url('admin-ajax.php'); ?>',
    data: data, 
    dataType: 'json', // ** ensure you add this line **
    success: function(data) {
        jQuery.each(data, function(index, item) {
            //now you can access properties using dot notation
        });
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
        alert("some error");
    }
});

이것은 나에게 "데이터가 정의되어 있지 않다"고합니다.
휴 시그 라브

URL로 전달하는 데이터를 저장하는 고유 한 변수를 사용해야합니다. 데이터 변수가 mydata을 호출하면 다음 데이터를 사용 : 다음 mydata
데이브 Hilditch

아 알았어 감사.
Hugh Seagraves

Uncaught TypeError: Cannot use 'in' operator to search for '188' in그 오류가 발생합니다.
Si8

15

다른 배열과 마찬가지로 json 배열에 액세스하십시오.

for(var i =0;i < itemData.length-1;i++)
{
  var item = itemData[i];
  alert(item.Test1 + item.Test2 + item.Test3);
}

1
오래된 질문이지만 Test1, Test2, ext ...와 같은 이름을 모르고 어떻게 json 키를 반복 할 수 있습니까?
BarclayVision

@BarclayVision 당신은 키를 숫자로 사용합니다. 첫 번째 키는 [0]다음 키입니다 [1].
copilot0910

이 for 루프 안에 다른 ajax 호출을 사용할 수 있습니까? 그렇다면 어떻게 알려주십시오.
Jyoti Jadhav

5

이것은 모든 데이터 값을 쉽게 볼 수 있도록 고안 한 것입니다.

var dataItems = "";
$.each(data, function (index, itemData) {
    dataItems += index + ": " + itemData + "\n";
});
console.log(dataItems);


4

jQuery.map 함수를 사용해보십시오 .지도와 잘 작동합니다.

var mapArray = {
  "lastName": "Last Name cannot be null!",
  "email": "Email cannot be null!",
  "firstName": "First Name cannot be null!"
};

$.map(mapArray, function(val, key) {
  alert("Value is :" + val);
  alert("key is :" + key);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


2

경고를 원하지 않는다면, 그것은 html을 원합니다.

...
    $.each(data, function(index) {
        $("#pr_result").append(data[index].dbcolumn);
    });
...

참고 : "html"이 아닌 "append"를 사용하십시오. 그렇지 않으면 마지막 결과가 html보기에 표시됩니다.

그런 다음 HTML 코드는 다음과 같아야합니다

...
<div id="pr_result"></div>
...

html로 렌더링하기 전에 jquery에서 div 스타일을 지정할 수도 있습니다 (클래스 추가).


0

아래와 같이 JQuery ajax 호출 함수의 짧은 메소드를 사용하는 경우, 리턴 된 데이터는 루프 할 수 있도록 json 오브젝트로 해석되어야합니다.

$.get('url', function(data, statusText, xheader){
 // your code within the success callback
  var data = $.parseJSON(data);
  $.each(data, function(i){
         console.log(data[i]);
      })
})

0

배열에서 값을 찾기 위해 ES2015 화살표 함수의 일부입니다.

const result = data.find(x=> x.TEST1 === '46');

Checkout Array.prototype.find () 여기


0

$each또 다른 옵션은 배열 결과에 대한 jQuery Ajax 콜백입니다.

function displayResultForLog(result) {
  if (result.hasOwnProperty("d")) {
    result = result.d
  }

  if (result !== undefined && result != null) {
    if (result.hasOwnProperty('length')) {
      if (result.length >= 1) {
        for (i = 0; i < result.length; i++) {
          var sentDate = result[i];
        }
      } else {
        $(requiredTable).append('Length is 0');
      }
    } else {
      $(requiredTable).append('Length is not available.');
    }

  } else {
    $(requiredTable).append('Result is null.');
  }
}

0

foreach에 .map을 사용합니다. 예를 들어

success: function(data) {
  let dataItems = JSON.parse(data)
  dataItems = dataItems.map((item) => {
    return $(`<article>
                <h2>${item.post_title}</h2>
                <p>${item.post_excerpt}</p>
              </article>`)
  })
},
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.