AJAX mag meine geschachtelten Quotes nicht? (HTML)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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?
    Last edited by 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

    Comment


    • #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?

      Comment


      • #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!
        Last edited by syntaxerror; 09-03-2010, 14:59.

        Comment


        • #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>'

          Comment


          • #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.
            Last edited by syntaxerror; 09-03-2010, 16:37.

            Comment


            • #7
              Originally posted by DSitC View Post
              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

              Comment

              Working...
              X