AJAX成功からのjQuery結果に対する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

あなたは外側のループを取り外して交換することができますthisdata.data

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

あなたは近かった:

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

オブジェクト/マップの配列があるので、外側のループはそれらを繰り返します。内側のループは、各オブジェクト要素のプロパティを反復処理します。


最初のループは「カテゴリ」用で、その中のループは「属性」用です。他にどのように行われますか?
dcolumbus

プロパティではなくオブジェクト要素を操作する場合はどうでしょうか?質問の@aherrickのループが機能しないのはなぜですか?
StuperUser 2010年

1
このループは、別個の機能の使用時に使用される場合、$(data)代わりにdataそうでない変数は、k常に0を返す
user1226868

2
誰かが2番目の関数に渡される変数kとvを説明できますか?
ブレントコナー

この場合の@BrentConnorは、循環する配列のキーと値を表します。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 2014

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コマンドを手動で使用するか、単純にdataType: 'json'プロパティをajax呼び出しに追加することで、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");
    }
});

これは私に「データが未定義です」を与えています。
Hugh Seagraves

URLに渡すデータを格納する独自の変数を使用する必要があります。あなたのデータ変数がmydataという呼び出された場合は、データを使用します。MYDATA
デイブHilditch

ああ。了解しました。ありがとう。
Hugh Seagraves 2016

Uncaught TypeError: Cannot use 'in' operator to search for '188' inそのエラーを取得します。
Si8 2017年

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 2014年

この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呼び出し関数のshortメソッドを使用している場合、ループができるように、返されたデータを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

$each動作します。別のオプションは、配列結果のjQuery Ajax Callbackです。

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.