$ .each का उपयोग करके Json डेटा पर jquery लूप


160

मेरे पास JSON डेटा नामक एक चर में लौटा है।

यह जाटों को फिर से मिल गया है ...

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

और मैं $ .each का उपयोग करके संग्रह के माध्यम से लूप करने की कोशिश कर रहा हूं, लेकिन मैं उन समस्याओं में भाग रहा हूं जहां अलर्ट अपरिभाषित दिखाई दे रहा है। मैंने कई अलग-अलग सिंटैक्स की कोशिश की है, लेकिन यह पता नहीं लग सका है।

मैं जिस JQuery का उपयोग कर रहा हूं वह है

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

क्या कोई मुझे सही दिशा दिखा सकता है?

EDIT यह वह कोड है जो मैं डेटा को हथियाने के लिए उपयोग कर रहा हूं

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

और यह वह फ़ंक्शन है जिसे कॉल बैक पर कॉल किया जाता है

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

EDIT 2 यह मुझे थोड़ा भ्रमित कर रहा है, डॉक्स के अनुसार यह काम करना चाहिए जैसा कि मेरे पास है, लेकिन यह नहीं है। हेडर के अनुसार हेडर दिखाता है: -

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

और ऊपर JSON बिल्कुल सही है। मैं क्रोम का उपयोग कर रहा हूँ अगर यह कोई अलग बनाता है। आईई और एफएफ में परीक्षण करेंगे ...।

EDIT 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]"

इससे मेरा काम बनता है। सुनिश्चित करें कि डेटा प्रत्येक विधि के लिए सही तरीके से पास किए गए हैं।
14

जवाबों:


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

EDIT 3 के लिए:

यह समस्या को ठीक करता है, लेकिन "eval" का उपयोग करने का विचार नहीं है, आपको यह देखना चाहिए कि '/ Cms / GetPages / 123' में प्रतिक्रिया कैसी है।

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

1
लगता है कि मुझे जोड़ने की जरूरत हैeval(data)
रिप्पो

jQuery में "httpData" फ़ंक्शन में आप json डेटा के लिए एक तथाकथित विंडो ["eval"] देख सकते हैं। आप eval का उपयोग करने की जरूरत नहीं है। यह पंक्ति "$। get ('/ Cms / GetPages / 123'" आपको दिखाने के लिए है जो "डेटा" में प्राप्त कर रहे हैं।
andres descalzo


अपडेट किया गया उत्तर (EDIT 3 देखें) दिखाने के लिए कि क्या $.getउत्पादन होता है
रिप्पो

आप "/ Cms / GetPages / 123" में डेटा कैसे वापस कर रहे हैं?
andres descalzo

17

क्या आपने स्ट्रिंग से जावास्क्रिप्ट ऑब्जेक्ट में अपना डेटा परिवर्तित किया है?

आप इसे कर सकते हैं data = eval('(' + string_data + ')'); या, जो अधिक सुरक्षित है, data = JSON.parse(string_data);लेकिन बाद में केवल FF 3.5 में काम करेगा या यदि आप json2.js शामिल करते हैं

1.4 के बाद से jQuery भी उस के लिए कार्य किया है $.parseJSON(),।

लेकिन वास्तव में, $.getJSON()आपको पहले से ही जस की तस वस्तु देनी चाहिए, इसलिए आपको बस सबकुछ अच्छी तरह से जांच लेना चाहिए, कहीं न कहीं थोड़ी सी भी गलती है, जैसे कि आप किसी बात को भूल गए हों, या कोई एक कोष्ठक गायब है।


लगता है मुझे जोड़ने की जरूरत हैfillselect(eval(data));
रिप्पो

BTW कितना संगत है eval?
रिप्पो

3
वह होना चाहिए data = eval('('+string_data+')');। इसके अलावा, jQuery का एक और कार्य हैdata = jQuery.parseJSON(string_data);
ग्रेग

कुछ सही नहीं है। केवल eval(data)काम करता है। कृपया मेरे EDIT 2
रिप्पो

2
मैंने jQuery.parseJSON (string_data) को कुछ उदाहरणों में विफल देखा है, जहां डेटा = eval ('(' string_data + ')') ठीक काम करता है।
डोमिनिक रास

5

getJSON आपके लिए JSON के डेटा का मूल्यांकन करेगा, जब तक कि सही सामग्री-प्रकार का उपयोग किया जाता है। सुनिश्चित करें कि सर्वर अनुप्रयोग / json के रूप में डेटा लौटा रहा है।


1
फ़िडलर के अनुसार सामग्री प्रकार हैContent-Type: application/json; charset=utf-8
रिपो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.