Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehler beim Parsen von Json-Object

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fehler beim Parsen von Json-Object

    Hallo,

    ich möchte in meiner Webanwendung durch ein Ajax-Request ein Json objekt erhalten. Dann durch das Json Objekt iterieren und eine Select-(Combo)-Box daraus generieren.

    Mein Problem ist:
    Ich bekomme immer den Feher "SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data"

    Woran könnte das liegen?

    Ich arbeite mit PHP (und CakePHP), MySQL, JavaScript (und Jquery),

    Mein JavaScript-Code:
    Code:
    $("#addfactcategory").click(function(){
               
                		$.ajax({
            	url: "/shyotrex/articles/getfactcategory/"+id,   	// Url to which the request is send
    			type: "POST",      		
                            	// Data sent to server, a set of key/value pairs representing form fields and values 
    			contentType: false,       		// The content type used when sending data to the server. Default is: "application/x-www-form-urlencoded"
        	    cache: false,					// To unable request pages to be cached
    			processData:false,  			// To send DOMDocument or non processed data file it is set to false (i.e. data should not be in the form of string)
    			success: function(data)  		// A function to be called if request succeeds
                            {
                               // alert(data);
                                var selectbox ="";
                                  
                                 
                                selectbox = "<select id=\"selbox\">";
                                selectbox += "<option value=\"0\" selected>Bitte auswählen</option>";
                                 
                               
                        $.each(JSON.parse(data), function(idx, obj) {
                                
                                selectbox += "<option value=\""+obj.FactCategory.Fact_Category_ID+"\">"+obj.FactCategory.Title+"</option>"
                            
                        });
                        
                        selectbox += "</select>";
                            
                             $("#factcategoryresult").html(selectbox+"<br/>"+ $("#factcategoryresult").html());
                             
                            }	  
                            
    	   });
            });
    Mein PHP-Code:
    PHP-Code:
        public function getfactcategory($id){
            
    $this->autoRender false;
            
             
    $factcategories $this->Article->Fact->FactCategory->find  
                        
    (  
                            
    'all'
                        
    );  
                    
                         
    $options['joins'] = array(
                                array(
    'table' => 'Fact',
                                    
    'alias' => 'fact',
                                    
    'type' => 'INNER',
                                    
    'conditions' => array(
                                        
    'fact.Fact_Category_ID = FactCategory.Fact_Category_ID',
                                    )
                                ),
                               
                            );
                         
                         
    $options["fields"] = "*"
                           
    $factcategories $this->Article->Fact->FactCategory->find  
                        
    (  
                            
    'all'    
                        
    );  
    //                echo '[{"FactCategory":{"Fact_Category_ID":"1","Title":"Ideale Reisezeit"},"Fact":[]},{"FactCategory":{"Fact_Category_ID":"2","Title":"Klimazone"},"Fact":[]}]';
                           
       
    echo json_encode($factcategoriesJSON_UNESCAPED_UNICODE);
             
        } 
    Das hier ist das Ergebnis, wenn ich mein Json Objekt ausgebe:

    [{"FactCategory":{"Fact_Category_ID":"1","Title":"I deale Reisezeit"},"Fact":[]},{"FactCategory":{"Fact_Category_ID":"2","Title": "Klimazone"},"Fact":[]}]
    Was komisch ist:

    wenn ich das Json Objekt nicht per Ajax generiere, sondern in JavaScript einfach hart Codiert speichere, dann funktioniert es.

    Also so:

    Code:
    var test = '[{"FactCategory":{"Fact_Category_ID":"1","Title":"Ideale Reisezeit"},"Fact":[]},{"FactCategory":{"Fact_Category_ID":"2","Title":"Klimazone"},"Fact":[]}]';
    ...obwohl das genau der gleiche "String" ist, den ich erhalte, wenn ich mir das Ajax-Ergebnis ausgeben lasse.

    Prüfe ich jedoch in einer IF-Abfrage, ob die Strings gleich sind, erhalte ich false.

    Hat jemand eine Idee, wo mein Fehler liegen könnte ??

  • #2
    ich seh da jetzt keinen fehler,was liefert denn alert(data) ?

    Kommentar


    • #3
      alert(data); liefert genau das hier:

      Code:
      [{"FactCategory":{"Fact_Category_ID":"1","Title":"I deale Reisezeit"},"Fact":[]},{"FactCategory":{"Fact_Category_ID":"2","Title": "Klimazone"},"Fact":[]}]

      Kommentar


      • #4
        Warum sendet dein AJAX call keinen dataType? Zumindest "text" wenn du selber parsen willst. Zumindest bei älteren jquery Versionen könnte das bereits das Problem sein
        dataType (default: Intelligent Guess (xml, json, script, or html))
        Type: String
        The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string).
        Developerkonsole befragen... wie schon unser Ex-Bundeskanzler Helmut "Birne" Kohl einst sagte "Entscheident ist, was hinten rauskommt"
        Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

        Kommentar


        • #5
          Ich habe jetzt folgendes hinter $.ajax({ geschrieben:
          Code:
           dataType: "json",
          hat nichts geändert

          und ich habe meine jQuery Version durch die neueste ersetzt

          - hat auch nichts geändert

          Meine Konsole gibt das hier aus:

          SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
          $.each(JSON.parse(data), function(idx, obj) {

          (und ein Pfeil auf JSON.parse()

          Kommentar


          • #6
            Wenn du "dataType: json" sendest, wird der JSON String automatisch in ein Objekt umgewandelt (sofern ich die jquery Doku an dieser Stelle richtig verstanden habe).

            Sende mal explizit "text"...

            edit:
            Die Fehlermeldung lautet im übrigen nur im Firefox so. In Chrome heisst es "Uncaught SyntaxError: Unexpected token o" und im IE (9) "SCRIPT1014: Ungültiges Zeichen"
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              console.log(data) und mal nach Leerzeichen am Anfang suchen.
              VokeIT GmbH & Co. KG - VokeIT-oss @ github

              Kommentar


              • #8
                Hier gabs mal was:

                http://www.php.de/javascript-ajax-un...de-fehler.html

                Kommentar

                Lädt...
                X