2013-08-29 15 views
42

में '324' की तलाश करने के लिए 'इन' ऑपरेटर का उपयोग नहीं कर सकता है मैं HTML में सर्वर द्वारा लौटाए गए AJAX और आउटपुट जेसन डेटा द्वारा एक अनुरोध अनुरोध भेजने का प्रयास कर रहा हूं।Jquery - Uncaught TypeError:

लेकिन, मुझे यह त्रुटि मिली।

Uncaught TypeError: Cannot use 'in' operator to search for '324' in 
[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}] 

यह मेरा कोड है जो AJAX द्वारा php फ़ाइल को प्राप्त करने का अनुरोध भेजता है। जब मैं $ .each विधि का उपयोग करता हूं, तो मुझे उपरोक्त में दिखाई देने वाली त्रुटि मिलती है।

parentCat.on('change', function(e){ 
    parentCatId = $(this).val(); 

    $.get(
     'index.php?r=admin/post/ajax', 
     {"parentCatId":parentCatId}, 
     function(data){      
      $.each(data, function(key, value){ 
       console.log(key + ":" + value) 
      }) 
     } 
    ) 

}) 

यह मेरा PHP कोड है जो जेसन प्रारूप में क्वेरी परिणाम देता है।

public function actionAjax(){ 

    $parentCatId=$_GET['parentCatId']; 

     $catData = Category::getTargetCategoryData($parentCatId); 

     echo CJSON::encode($catData); 
     Yii::app()->end(); 

} 

इस PHP द्वारा आउटपुट जेसन डेटा इस तरह है।

[{"id":50,"name":"SEO"},{"id":22,"name":"LPO",}] 

किसी को भी इस समस्या को ठीक करने के लिए जानता है?

कृपया मेरी मदद करें। अग्रिम धन्यवाद :)

+1

कहाँ है कि त्रुटि संदेश से आता है देखने के लिए? – Mike

+1

क्या आप 'प्रत्येक 'stmt से पहले' console.log (डेटा) 'जोड़ सकते हैं और देख सकते हैं कि कंसोल –

+0

में क्या मुद्रित है! मेरी समस्या अब हल हो गई है :) – Hayato

उत्तर

71

आपके पास एक JSON स्ट्रिंग है, ऑब्जेक्ट नहीं। JQuery को बताएं कि आप एक JSON प्रतिक्रिया की अपेक्षा करते हैं और यह आपके लिए इसे पार्स करेगा। या तो $.getJSON बजाय $.get, का उपयोग करें या $.get को डेटाप्रकार तर्क पारित:

$.get(
    'index.php?r=admin/post/ajax', 
    {"parentCatId":parentCatId}, 
    function(data){      
     $.each(data, function(key, value){ 
      console.log(key + ":" + value) 
     }) 
    }, 
    'json' 
); 
+1

बहुत बहुत धन्यवाद! यह काम करता है। – Hayato

+2

@ हायाटो आपका स्वागत है! :) – Paulpro

+0

आपको बहुत बहुत धन्यवाद! – nekiala

6

आप JSON ला रहे हैं, तो $.getJSON() उपयोग करती हैं इसलिए स्वचालित रूप से एक जे एस वस्तु को JSON बदल देता है।

+0

बहुत धन्यवाद! – Hayato

20

आप $.parseJSON(data) का भी उपयोग कर सकते हैं जो एक PHP स्क्रिप्ट से वास्तविक JSON सरणी में आने वाली स्ट्रिंग को स्पष्ट रूप से परिवर्तित करेगा।

3

मैं बहुत तरह json डेटाप्रकार जोड़कर एक समान त्रुटि को ठीक:

$.ajax({ 
    type: "POST", 
    url: "someUrl", 
    dataType: "json", 
    data: { 
     varname1 : "varvalue1", 
     varname2 : "varvalue2" 
    }, 
    success: function (data) { 
     $.each(data, function (varname, varvalue){ 
      ... 
     }); 
    } 
}); 

और मेरे नियंत्रक में मैं बहुत की तरह किसी भी तार को दोहरे उद्धरण चिह्नों का इस्तेमाल किया था (ध्यान दें: वे जावा में भाग निकले किया जाना है) :

@RequestMapping(value = "/someUrl", method=RequestMethod.POST) 
@ResponseBody 
public String getJsonData(@RequestBody String parameters) { 
    // parameters = varname1=varvalue1&varname2=varvalue2 
    String exampleData = "{\"somename1\":\"somevalue1\",\"somename2\":\"somevalue2\"}"; 
    return exampleData; 
} 

तो, आप अगर वे तार के रूप में इस्तेमाल किया जा रहा है अपने नंबरों को दोहरे उद्धरण चिह्नों का उपयोग कर की कोशिश कर सकते हैं (और हटाने है कि पिछले अल्पविराम):

[{"id":"50","name":"SEO"},{"id":"22","name":"LPO"}] 
,210
0

उपयोग getJSON

$.getJSON(
'index.php?r=admin/post/ajax', 
{"parentCatId":parentCatId}, 
function(data){      
    $.each(data, function(key, value){ 
     console.log(key + ":" + value) 
    }) 
}); 

विस्तार से यहाँ http://api.jquery.com/jQuery.getJSON/

+1

यह उत्तर पहले ही दिया जा चुका है। –

संबंधित मुद्दे