2011-03-13 24 views
53

मुझे JQery.ajax कॉल से JSON ऑब्जेक्ट की सामग्री प्राप्त करने में समस्या हो रही है। मेरे कॉल:JQuery.ajax सफलता डेटा से पार्स JSON

$('#Search').click(function() { 
    var query = $('#query').valueOf(); 
    $.ajax({ 
     url: '/Products/Search', 
     type: "POST", 
     data: query, 
     dataType: 'application/json; charset=utf-8', 
     success: function (data) { 
      alert(data); 
      for (var x = 0; x < data.length; x++) { 
       content = data[x].Id; 
       content += "<br>"; 
       content += data[x].Name; 
       content += "<br>"; 
       $(content).appendTo("#ProductList"); 
       // updateListing(data[x]); 
      } 
     } 
    }); 
}); 

ऐसा लगता है कि JSON ऑब्जेक्ट सही ढंग क्योंकि लौटे किया जा रहा है "चेतावनी (डेटा)" निम्नलिखित

[{"Id": "1", "Name": "Shirt"}, {"Id": "2", "Name":"Pants"}] 

प्रदर्शित करता है लेकिन जब मैं पृष्ठ पर आईडी या नाम प्रदर्शित की कोशिश का उपयोग कर :

content = data[x].Id; 
content += "<br>"; 
content += data[x].Name; 
content += "<br>"; 

यह पृष्ठ पर "अपरिभाषित" लौटाता है। मैं क्या गलत कर रहा हूं?

सहायता के लिए धन्यवाद।

+5

प्रलेखन मदद करता है। http://api.jquery.com/jQuery.ajax/ दिखाता है कि '' एप्लिकेशन/जेसन; charset = utf-8'' 'डेटा टाइप 'के लिए मान्य मान नहीं है। –

+0

JSON.parse() –

उत्तर

78

डेटा वापस JSON की स्ट्रिंग प्रतिनिधित्व के रूप में आ रहा है और आप इसे JavaScript ऑब्जेक्ट में कनवर्ट करने के लिए वापस नहीं कर रहे हैं। dataType को 'json' पर स्वचालित रूप से परिवर्तित करने के लिए सेट करें।

+4

@DipakYadav द्वारा जेसन में कनवर्ट करें: 'getJSON' पोस्ट नहीं होगा। –

+6

@ मार्सेलो कैंटोस (आपके उत्तर के बारे में): यह सच है। हालांकि, [jQuery मैनुअल] के अनुसार (http://api.jquery.com/jQuery.ajax/), "_any malformed JSON अस्वीकार कर दिया गया है और एक पार्स त्रुटि फेंक दी गई है। JQuery 1.9 के रूप में, एक खाली प्रतिक्रिया भी अस्वीकार कर दी गई है_" । तो आप केवल 'डेटा टाइप:' जेसन 'का उपयोग कर सकते हैं, यदि आप निश्चित हैं, तो वह सर्वर पॉपरली रूप से स्वरूपित JSON लौटाएगा। अगर यह केवल "_a स्ट्रिंग देता है, जो JSON_ जैसा दिखता है", तो आपको jQuery रूपांतरण को मजबूर करने के लिए 'डेटा टाइप:" टेक्स्ट जेसन "का उपयोग करना चाहिए। – trejder

+0

शीर्षलेख ('सामग्री-प्रकार: एप्लिकेशन/जेसन'); यदि आप php –

2

अपने json वस्तु के माध्यम से चलने के लिए jQuery का प्रयास करें each समारोह:

$.each(data,function(i,j){ 
    content ='<span>'+j[i].Id+'<br />'+j[i].Name+'<br /></span>'; 
    $('#ProductList').append(content); 
}); 
5

खैर ... तुम वहाँ रास्ते से 3/4 के बारे में है ... आप पहले से ही पाठ के रूप में आपके JSON है।

समस्या यह है कि आप इस स्ट्रिंग से निपटने होना दिखाई देते हैं जैसे कि वह पहले से ही क्षेत्रों कि प्रेषित किया गया से संबंधित गुणों के साथ JavaScript ऑब्जेक्ट का था।

यह नहीं है ... यह सिर्फ एक स्ट्रिंग है।

प्रश्नों की तरह "सामग्री = डेटा [x] .id," विफल होने के लिए बाध्य हैं क्योंकि जावास्क्रिप्ट उन स्ट्रिंग्स से जुड़ी इन गुणों को नहीं ढूंढ रहा है जो इसे देख रहे हैं ... फिर, यह सिर्फ एक स्ट्रिंग है।

आप बस के माध्यम से JSON के रूप में डेटा पार्स करने के लिए ... हाँ ... JSON ऑब्जेक्ट की पार्स विधि सक्षम होना चाहिए।

myResult = JSON.parse(request.responseText); 

अब myResult एक जावास्क्रिप्ट ऑब्जेक्ट है जिसमें गुणों को AJAX के माध्यम से प्रेषित किया गया है।

है कि आप जिस तरह से प्रबंधित करने की अनुमति चाहिए आप की कोशिश कर रहा प्रतीत होते हैं।

लग रहा है जब ECMA5 जोड़ा गया है की तरह JSON.parse जोड़ा गया है, तो कुछ भी काफी आधुनिक इस मूल रूप को संभालने के लिए ... आप जीवाश्मों को संभालने के लिए है, तो सक्षम होना चाहिए, तो आप भी इस तरह के jQuery के रूप में इस संभाल करने के लिए बाहरी पुस्तकालयों, की कोशिश कर सकते या JSON2

रिकॉर्ड के लिए, यह पहले से ही किसी और HERE किसी के लिए एंडी ई द्वारा उत्तर दिया गया था।

संपादित - 'सरकारी या विश्वसनीय सूत्रों' के लिए अनुरोध देखा है, और शायद कोडर कि मुझे लगता है में से एक सबसे विश्वसनीय होगा जॉन Resig ~ ECMA5 JSON ~ मैं देशी JSON के बारे में वास्तविक ECMA5 कल्पना से जुड़ा हुआ है | समर्थन, लेकिन मैं सूखे विनिर्देश की तुलना में किसी को रेजीग जैसे मास्टर को संदर्भित करता हूं।

51

मैं सुझाव है कि आप का उपयोग करें:

var returnedData = JSON.parse(response); 

JSON स्ट्रिंग JavaScript ऑब्जेक्ट में बदलने के लिए (अगर यह सिर्फ पाठ है)।

var Data = $.parseJSON(response); 
+1

@RyanGates का उपयोग कर रहे हैं, तो मेरा मानना ​​है कि abobreshov सरल 'सफलता: फ़ंक्शन (डेटा) {डेटा = JSON.parse (डेटा);}' के बारे में बात कर रहा है, अगर मैं गलत नहीं हूं। – trejder

+0

निश्चित रूप से, मेरा मतलब था – abobreshov

3

आप jQuery parseJSON विधि का उपयोग कर सकते हैं alert। जब आप

alert(data) 

यदि डेटा एक स्ट्रिंग है, तो यह सब कुछ प्रिंट करेगा। हालांकि अगर आप प्रिंट करते हैं तो जेसन ऑब्जेक्ट है। इस प्रतिक्रिया तो आप यकीन है कि आप (इस मामले में json) एक वस्तु के रूप में उपयोग कर सकते हैं हो सकता है यदि आप चेतावनी

[object Object] 

में निम्नलिखित प्रतिसाद मिलेगा।

JSON.parse(data) 
6

जिस तरह से आप सुनिश्चित कर सकते हैं कि गलती (json के बजाय स्ट्रिंग का उपयोग) नहीं होता है के इस प्रकार को देखने के लिए क्या में मुद्रित हो जाता है में से एक:

0

jQuery एपीआई से::

इस प्रकार, आप ऐसा करने से उपयोग करने से पहले json में अपने स्ट्रिंग परिवर्तित करने के लिए पहले की जरूरत है dataType की सेटिंग के साथ, किसी का भी उल्लेख किया गया है, jQuery करने की कोशिश करेंगे प्रतिक्रिया के एमआईएमई प्रकार (जेएसओएन टेक्स्ट के लिए एमआईएमई प्रकार "एप्लिकेशन/जेसन") के आधार पर $.parseJSON() के साथ इसका अनुमान लगाएं (1.4 JSON में जावास्क्रिप्ट ऑब्जेक्ट उत्पन्न होगा)।

या आप इसे स्वचालित रूप से परिवर्तित करने के लिए dataType से json सेट कर सकते हैं।

0

मुझे यकीन नहीं है कि आपके सेट अप में क्या गलत हो रहा है। हो सकता है कि सर्वर हेडर को सही तरीके से सेट न कर रहा हो। निश्चित नहीं। एक लंबे शॉट के रूप में, आप इस

$.ajax({ 
    url : url, 
    dataType : 'json' 
}) 
.done(function(data, statusText, resObject) { 
    var jsonData = resObject.responseJSON 
}) 
3

यह काम है, उदाहरण

.ajax({ 

      url: "http://localhost:11141/Search/BasicSearchContent?ContentTitle=" + "تهران", 
      type: 'GET', 
      cache: false, 
      success: function (result) { 

       // alert(jQuery.dataType); 
       if (result) { 
        // var dd = JSON.parse(result); 
        alert(result[0].Id) 
       } 

      }, 
      error: function() { 
       alert("No"); 
      } 
     }); 

अंत में, आप इस बयान उपयोग करने की आवश्यकता के लिए कोशिश कर सकते हैं ...

result[0].Whatever 
संबंधित मुद्दे