JSON-Übergabe-Problem an PHP

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

  • JSON-Übergabe-Problem an PHP

    Hallo,

    ich arbeite mich gerade in Prototype-JS und JSON ein. Jetzt hab ich ein Problem. Wenn ich ein Array an PHP übergeben möchte kann ich das lt. Dokumentationen im Internet via JSON übergeben.
    normalerweise kann man sein JS-Array so aufbauen:
    Code:
    var myarray=['hh','jjj'];
    und es dann so via Prototype an PHP übergeben, wo man es dann mit json_decode zu einem php-array umwandelt. Jetzt funktioniert das bei mir aber nicht. Bei mir klappt es nur, wenn ich das javascript-array als string übergebe und zwar so:
    Code:
    var myarray="['hh','jjj']";
    und das ganze dann via json_decode(stripslashes($array_input)) in PHP-Array umwandele. Hat jemand ne Idee wie ich das hinkriegen könnte, dass ich keinen String übergeben muss???

  • #2
    Arbeite direkt mit Prototype's Arrays, diese besitzen die toJSON-Methode, welche afaik bei dem Senden aufgerufen wird.

    Kommentar


    • #3
      funktioniert, danke ;-)

      Kommentar


      • #4
        wenn wir grad hier bei prototype und json sind, mal noch ne andere frage

        und zwar folgendes:
        Gibt es eine Möglichkeit von Javascript und Prototype, dass ich ohne Schleifen und Abfragen ein Array zusammen kriege, dass mir alle "ge"-checkten Radio-Buttons des selben Names übergeben???? Bisher hab ich nämlich nur die Möglichkeit gefunden, die Anzahl aller Radio-Buttons des selben Namens herauszufinden, und zwar so:
        Code:
        document.getElementsByName("test")
        und folgende Schleife will ich mittels Javascript in einer Zeile haben:
        Code:
        for(i=0;i<document.getElementsByName("test").length;i++)
                    {
                        if(document.getElementsByName("test")[i].checked==true)
                        {
                            mycheckboxe[i] = document.getElementsByName("test")[i].value;
                        }
                    }
        Gibt es da eine Möglichkeit, oder nicht? Weil ich möchte gerne unnötige Schleifendurchläufe vermeiden ;-)

        SChonmal Danke

        Kommentar


        • #5
          PHP-Code:
          var mycheckbox = [];
          // Alle radio-Buttons eines Formulares
          $( 'myform' ).getInputs'radio''test' ).each( function( el ) {
             if( 
          el.checked mycheckbox.pushel.value );
          } );
          // Oder überhaupt alle radio-Buttons auf der Seite
          $$( 'input[type=radio][name=test]' ).each( function( el ) {
             if( 
          el.checked mycheckbox.pushel.value );
          } ); 
          Wobei ersteres aufgrund des kleineren zu durchsuchenden DOM-Baumes zu bevorzugen ist!

          Kommentar


          • #6
            moin, hab noch n kleines Problem mit dem JSON-Gedöns, aber das letzte ;-)
            und zwar bekomme ich vom server (PHP) n array zurück, dass ich nun auch als JSON-Objekt in meiner Funktion habe, jedoch nur als String. Kennt jemand ne Möglichkeit, den String einfach auseinanderzunehmen, dass ich letztendlich wieder das Array habe????
            so mach ich das im Moment, da kommt aber nur der JSON-"String" bei raus: nom und json sind vom Server generierte Parameter, die automatisch von Prototype gefüllt werden
            Code:
            function f_assign(nom, json)
            {
                
                arr_json = new Array(json);
                
                for(a in arr_json[0])
                {
                    $('response').innerHTML += arr_json[0][a];
                }

            Kommentar


            • #7
              eval oder den passenden Header zurücksenden, dann macht Prototype das für dich (Link, Abschnitt "Automatic JavaScript response evaluation").

              Kommentar


              • #8
                ne das funktioniert irgendwie nicht.
                hier mal meine Rückgabe:
                Code:
                 
                $result = array("answer" => $arr_ausgabe);
                header('X-JSON: '.trim($myjson->encode($result )));
                und zurück hole ich es wie oben beschrieben
                Code:
                 function f_assign(nom, json)
                {
                	arr_json = new Array(json);
                	
                	for(a in arr_json[0])
                	{
                		$('response').innerHTML += "<br>" + arr_json[0][a];
                	}	
                	return json;
                }
                und da krieg ich halt nur den String obwohls so gemacht ist, wie in der prototype-doku drin steht

                Kommentar


                • #9
                  guck dir den header mal mit der Live HTTP Headers Extension für den FF an und poste den hier.
                  Was du da mit deinem Array biegst, checke ich allerdings nicht ganz!
                  Versuch vielleicht mal:
                  PHP-Code:
                  function theFunctransportjson ) {
                      var 
                  response = $( 'response' );
                      
                  json $Hjson );
                      
                  json.each( function( pair ) {
                          
                  response.insert'<br />'+pair.value );
                      } );

                  Ungetestet, scheint mir aber das zu machen, was du vor hast!

                  Kommentar


                  • #10
                    also im Header steht folgendes drin:

                    Code:
                    X-JSON	{"answer":"[\"Salami\",\"Pilze\"]"}
                    aber mit deinem bekomm ich jetzt folgende Ausgabe:

                    answer,["Salami","Sardellen"]

                    hab dann grad noch n bissl probiert, bekomms aber nit auseinander

                    Kommentar


                    • #11
                      Code:
                      X-JSON	{"answer":"[\"Salami\",\"Pilze\"]"}
                      Ist natürlich nicht richtig! Richtig wäre:
                      Code:
                      X-JSON	{"answer":["Salami","Pilze"]}
                      sonst ist answer kein Array! Musst meine Funktion dann natürlich noch so abändern, dass nicht json sondern json['answer'] ausgegeben wird!


                      Btw:
                      answer,["Salami","Sardellen"]
                      erhalte ich nicht als Ausgabe, sondern <br />["Salami","Sardellen"]

                      Kommentar


                      • #12
                        jo funktioniert so langsam n bissl besser ;-) die daten werden schön untereinander geschrieben, allerdings krieg ich jetzt noch n bissl mehr ausgegeben, und zwar quelltext, der folgendermaßen aussieht:
                        Code:
                         
                        Salami
                        Pilze
                        function (iterator, context) { var index = 0; iterator = 
                        iterator.bind(context); try { this._each(function (value) 
                        {iterator(value, index++);}); } catch (e) { if (e != $break)
                         { throw e; } } return this; }
                        
                        function (number, iterator, context) { iterator = iterator ? 
                        iterator.bind(context) : Prototype.K; var index = - number,
                         slices = [], array = this.toArray(); while ((index += number) < 
                        array.length) { slices.push(array.slice(index, index + number)); } 
                        return slices.collect(iterator, context); }
                        
                        function (iterator, context) { iterator = iterator ? 
                        iterator.bind(context) : Prototype.K; var result = true; 
                        this.each(function (value, index) {result = result && !!iter
                        ator(value, index);if (!result) {throw $break;}}); retur
                        n result; }
                        function (iterator, context) { it
                        
                        usw. usw.
                        haste da auch noch ne Ahnung, was das sein könnte oder besser gesagt. wodran das liegen könnte???

                        Kommentar


                        • #13
                          Was ist mit evalJSON() ?
                          ich glaube

                          Kommentar


                          • #14
                            Du hast das Array-Objekt mit for in ausgelesen, richtig?

                            Kommentar


                            • #15
                              ja richtig

                              EDIT:
                              ich hab mal grad alle Varianten ausprobiert. die 1. checkbox gedrückt, und ausgeben lassen, 1 und 3, 2 und 3, nur 2, nur 3. Immer wenn ich die 1. checkbox dabei hole, werden die ganzen Funktionen mit ausgegeben, wenn nur nr. 2 und 3 angeklickt werden, funktioniert es einwandfrei. Ich weiss keinen Rat mehr
                              Zuletzt geändert von Mercury1987; 10.12.2007, 07:58.

                              Kommentar

                              Lädt...
                              X