Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
AJAX mag meine geschachtelten Quotes nicht? (HTML) [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
AJAX mag meine geschachtelten Quotes nicht? (HTML)


 
syntaxerror
09-03-2010, 16:28 
 
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 :kotz:)

Ok, zur Sache.

(caller.htm)

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

 
Kropff
09-03-2010, 16:33 
 
GRUNDLAGEN: :teach:
$innerhtmlstr = '<table border="3"><tr><td>this is a test</td></tr></table>';

Peter

 
DSitC
09-03-2010, 16:47 
 
Wenn du in PHP eine Variable so definierst:

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

Dann wird diese intern so ankommen:

<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:

var newstr_js = "<?php echo($newstr); ?>";

Dann steht das dann für den JS-Parser so drin:

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

---

Fällt dir da was auf? ;)

 
syntaxerror
09-03-2010, 16:50 
 
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!

 
DSitC
09-03-2010, 17:00 
 
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):

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

 
syntaxerror
09-03-2010, 17:02 
 
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)


//js
var newstr_js = '<?php echo $newstr;?>';
Ist doch ganz hypsch ... und spart mir jegliches Escapen im PHP-Teil.

 
Kropff
09-03-2010, 17:17 
 
Dann steht das dann für den JS-Parser so drin:

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.
var newstr_js = '<table border="2"><tr><td>this is a test</td></tr></table>';
Peter


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:08 Uhr.