AJAX mag meine geschachtelten Quotes nicht? (HTML)

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

  • AJAX mag meine geschachtelten Quotes nicht? (HTML)

    Moinsen,

    bin ganz neu hier (allerdings nicht mehr ganz so neu im PHP, eher in der AJAX-Welt...kenne noch die Zeit als man davon träumte, mal einen JS2PHP-Callback hinzukriegen...mit den abstrusesten Krücken )

    Ok, zur Sache.

    (caller.htm)
    Code:
    <script type="text/javascript">
    createXHRObject = function() 
    {
     ...
    }
    
    dispatchToPHP = function (url,params)
    {
      var xmlhttp=createXHRObject();if(!xmlhttp){alert('Ajax not supported');return;}
      xmlhttp.open('POST',url);
      xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      xmlhttp.setRequestHeader("Content-length", params.length);
      xmlhttp.setRequestHeader("Connection", "close");
      
      xmlhttp.onreadystatechange=function()
      {
         if(xmlhttp.readyState!=4)return;
        // 404 error abfangen hier weggelassen
    
        try
        {
          new Function(xmlhttp.responseText)();
        }
        catch(E)
        {      
          alert("RUNTIME ERROR / EXCEPTION: \n\n" + xmlhttp.responseText);
        }
      } //onreadystatechange()
    
     xmlhttp.send(params);
    }
    
    prepareForCallback = function (value)
    {
      // BEMERKUNG: function e() befindet sich in ajax.php !
     
        var tbl = document.getElementById("maintable").value;
        var e=window.encodeURIComponent||window.escape;
        var params='tbl='+e(tbl)+'&value='+e(value);
       
      dispatchToPHP('ajax.php',params);
    }
    </script>
    
    <div id="maintable">
    <!-- ganz viel unwichtiger Code -->
    </div>
    
    <select id="bla" name="fasel" size="1" onChange=javascript:prepareForCallback(this.value)>
    (ajax.php)
    PHP-Code:

    <?php
    function e($s
    {
        return 
    addcslashes($s,"\\&\'\"\n\r<>/");
    }

    // ------------------------------------------
    function testfunc ()
    // ------------------------------------------
    {
    $innerhtmlstr "<table border><tr><td>this is a test</td></tr></table>";

    // fkt. NICHT
    // $innerhtmlstr = "<table border=\"2\"><tr><td>this is a test</td>
    // </tr></table>";

      
    return $innerhtmlstr;
    }

    // php-hauptteil (ajax)

    $newstr testfunc();

    ?>
    // JS-Teil
    var newstr_js = "<?php echo $newstr;?>";

    document.getElementById("blubberbla").innerHTML = newstr_js;
    Also, in Worten:

    der mag die " " nicht bei den Attributen, und ich weiß einfach noch nicht wieso. Verhalten ist, dass er mir immer die Exception schmeißt ("Runtime error" schreib ich da wie man sieht oben raus).

    Schreib ich statt border="3" nur border, dann klappt es!
    Allerdings ist es hier verflixt wichtig, dass ich Attribute verwenden kann.
    Auch die aus JS bekannte Krücke (einfache Anführungszeichen, dann doppelte innen) klappt hier nicht.

    Also, wo krankt's hier?
    Zuletzt geändert von syntaxerror; 09.03.2010, 14:45.

  • #2
    GRUNDLAGEN:
    PHP-Code:
    $innerhtmlstr '<table border="3"><tr><td>this is a test</td></tr></table>'
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Wenn du in PHP eine Variable so definierst:

      PHP-Code:
      $innerhtmlstr "<table border=\"2\"><tr><td>this is a test</td></tr></table>"
      Dann wird diese intern so ankommen:

      Code:
      <table border="2"><tr><td>this is a test</td></tr></table>
      ---

      Wenn du dies dann im Javascript teil per PHP per echo() so einbaust:

      PHP-Code:
      var newstr_js = "<?php echo($newstr); ?>";
      Dann steht das dann für den JS-Parser so drin:

      Code:
      var newstr_js = "<table border="2"><tr><td>this is a test</td></tr></table>";
      ---

      Fällt dir da was auf?

      Kommentar


      • #4
        JEP!

        Danke für den Hinweis, und zu Peter:

        das mit den einfachen Quotes am Anfang, dann die doppelten innendrin - schrieb ich ja bereits! - nahm er ebenfalls so nicht an.

        [edit] DSitC hat mir jetzt auch eine perfekte Erklärung geliefert, WIESO:

        Innendrin stehen natürlich fein säuberlich die " ". Ob außen bei PHP die '...' oder die "..." stehen, interessiert den JS-Parser hinterher nicht!
        D. h. es sieht dann genauso wie beim letzten von DSitC geposteten Codeschnipsel aus - in beiden Fällen!
        Zuletzt geändert von syntaxerror; 09.03.2010, 14:59.

        Kommentar


        • #5
          Der Vollständigkeit halber:

          Da hier 2x geparst wird vor der Ausgabe muss man auch 2x escapen. Das sieht das so aus (diesmal mit einfachen Anführungszeichen, weil's einfach sauberer ist):

          PHP-Code:
          $innerhtmlstr '<table border=\\"2\\"><tr><td>this is a test</td></tr></table>'

          Kommentar


          • #6
            OKAY, DANKE nochmal!

            Allerdings, syntax denkt auch mit! (sobald er die Materie verstanden hat)

            DSitC, was hältst du davon?
            (das berühmte Pferd, das von hinten aufgezäumt wird)

            Code:
            //js 
            var newstr_js = '<?php echo $newstr;?>';
            Ist doch ganz hypsch ... und spart mir jegliches Escapen im PHP-Teil.
            Zuletzt geändert von syntaxerror; 09.03.2010, 16:37.

            Kommentar


            • #7
              Zitat von DSitC Beitrag anzeigen
              Dann steht das dann für den JS-Parser so drin:

              Code:
              var newstr_js = "<table border="2"><tr><td>this is a test</td></tr></table>";
              Sorry, hab das übersehen. Ich arbeite auch bei JS immer mit Hochkommata.
              PHP-Code:
              var newstr_js '<table border="2"><tr><td>this is a test</td></tr></table>'
              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar

              Lädt...
              X