PHP->AJAX->PHP + JavaScript

PHP->AJAX->PHP + JavaScript
2009-02-27T10:04:00+01:00
2009-02-27T14:18:49+01:00
2022-07-19T20:11:22+02:00
m.l
Tudom, hogy volt már ilyen kérdés és a megoldás egy részét meg is találtam.

Szóval adott egy form.php button gomb megnyomására lefut az AJAX kérés és egy div-be megy az eredmeny (eredmeny.php).

Na most az eredmeny.php-ben javascript ami le is fut ha így írom be:
echo '<table><script>alert("Hiba");</script></table>';

Viszont így meg nem szerepel a script a válaszban:
echo '<script>alert("Hiba");</script>';

De vajon miért nem?

majax.js (részlet)
xmlHttpRequest.onreadystatechange = function() { try { if (xmlHttpRequest.readyState==4) { if (xmlHttpRequest.status==200) { document.getElementById(div).innerHTML = xmlHttpRequest.responseText; alert(document.getElementById(div).innerHTML); jsrun(document.getElementById(div)); } else { alert("Hiba! \n\n xmlHttpRequest.status: " + xmlHttpRequest.status ); } } } catch (e) { alert('HIBA történt: ' + e.description); }

function jsrun(objektum) { var szkripttagok = objektum.getElementsByTagName('script'); for(var n=0; n < szkripttagok.length; n++) { eval(szkripttagok[n].innerHTML); } }
Mutasd a teljes hozzászólást!
Az a baj, hogy az FF-ben műxik az overrideMimeType és - eredetileg - az érkező text/html kódodat text/xml-ként felülírta. Így másképp értelmezte.

Második kérdésedre válaszolva....hmmm...A szellemek látták hogy rájössz a megoldásra és továbbálltak... :D :D :D :D
Mutasd a teljes hozzászólást!

  • háát akkor hagyd ki a <table> reszt... :)

    szkripttagok[n].innerHTML);

    az innerhtml biztos kell??
    Mutasd a teljes hozzászólást!
  • És még valami. Most vettem észre, hogy a fenti 'fél'megoldás is CSAK IE alatt működik. FF alatt nem történik semmi.
    Mutasd a teljes hozzászólást!
  • hogy érted, hogy hagyjam ki a <TABLE> részt?
    Akkor egyáltalán nem működik a dolog.
    Mutasd a teljes hozzászólást!
  • Próbáld meg a visszatérő értékre ráengedni a normalize()-t


    document.getElementById(div).innerHTML = xmlHttpRequest.responseText.normalize();

    Azt sajna nem értem hogy miért csak a table-esetén viszi IE, mert nálam rendesen megy.
    Mutasd a teljes hozzászólást!
  • Lehet, hogy maga az AJAX rossz amit használok?
    Itt a teljes kód:

    function getXmlHttpRequestObject() { var xmlHttpRequest = false; if ( window.XMLHttpRequest ) { try { xmlHttpRequest = new XMLHttpRequest(); } catch (e) { xmlHttpRequest = false; } } else if ( window.ActiveXObject ) { try { xmlHttpRequest = new ActiveXObject( "Msxml2.XMLHTTP" ); } catch (e) { try { xmlHttpRequest = new ActiveXObject( "Microsoft.XMLHTTP" ); } catch (e) { xmlHttpRequest = false; } } } // Override mime type if browser supports it (like Mozilla) if ( xmlHttpRequest.overrideMimeType ) { xmlHttpRequest.overrideMimeType( "text/xml" ); } if (!xmlHttpRequest) { alert('Nem tudtam létrehozni: XMLHTTP instance'); } return xmlHttpRequest; } function XmlHttpElokeszites( xmlHttpRequest, data, method, _handler, div ) { var handler; var finalData; var response; if ( method == "GET" ) { handler = _handler + "?" + data; finalData = null; } else { handler = _handler; finalData = data; } xmlHttpRequest.open( method, handler, true ); if ( method == "POST" ) { xmlHttpRequest.setRequestHeader( "Method", "POST " + _handler + " HTTP/1.1" ); xmlHttpRequest.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" ); xmlHttpRequest.setRequestHeader( "Content-Length", finalData.length ); } xmlHttpRequest.onreadystatechange = function() { try { if (xmlHttpRequest.readyState==4) { if (xmlHttpRequest.status==200) { var vissza = xmlHttpRequest.responseText; document.getElementById(div).innerHTML = xmlHttpRequest.responseText; alert(document.getElementById(div).innerHTML); jsrun(document.getElementById(div)); } else { alert("Hiba! \n\n xmlHttpRequest.status: " + xmlHttpRequest.status ); } } } catch (e) { alert('HIBA történt: ' + e.description); } } return finalData; } function xmlHttpHivas( method, data, handler, div ) { var xmlHttpRequest = getXmlHttpRequestObject(); var finalData = XmlHttpElokeszites( xmlHttpRequest, data, method, handler, div ); xmlHttpRequest.send( finalData ); } function jsrun(objektum) { var szkripttagok = objektum.getElementsByTagName('script'); alert(szkripttagok.length); for(var n=0; n < szkripttagok.length; n++) { alert(szkripttagok[n].innerHTML); eval(szkripttagok[n].innerHTML); } }

    a form.php

    ....... <title>Rendszer rögzítése</title> <script type="text/javascript" src="majax.js"></script> <script type="text/javascript" language="JavaScript"> function ujsor( esemeny ) { var url = 'geplista_edit_lst.php'; var paramok ='txTipus=' + document.getElementById('txTipus').value + '&txGyariszam=' + document.getElementById('txGyariszam').value + '&selGyarto=' + document.getElementById('selGyarto').value + '&selPartner=' + document.getElementById('selPartner').value + '&txAlTipus=' + document.getElementById('txAlTipus').value + '&txAlGyariszam=' + document.getElementById('txAlGyariszam').value + '&esemeny=' + esemeny; xmlHttpHivas( 'POST', paramok, url, "tbleredmeny" ); this.document.frmGepek.txAlTipus.value = ""; this.document.frmGepek.txAlGyariszam.value = ""; this.document.frmGepek.txAlTipus.focus(); } //--> </script> <style type="text/css"> .... <input name="btnRogzit" type="button" id="btnRogzit" onclick="ujsor('U')" value="Hozzáad" /> ......
    Mutasd a teljes hozzászólást!
  • Gyorsan átszaladva, ezt mindenképp töröld:

    if ( xmlHttpRequest.overrideMimeType ) { xmlHttpRequest.overrideMimeType( "text/xml" ); }

    Vagy írd át:
    if ( xmlHttpRequest.overrideMimeType ) { xmlHttpRequest.overrideMimeType( "text/html" ); }
    Mutasd a teljes hozzászólást!
  • Megtettem. De mi ezzel a baj.

    Amúgy lehet, hogy szellemek vannak a gépembe.
    Kínomba kimentem elszívni egy cigit. Vissza jöttem ismét megpróbáltam <table></table> nélkül. És láss csodát működik.
    IE-be is és FF alatt is.

    Na most mi történt??
    Mutasd a teljes hozzászólást!

  • header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache");

    Ezt most beraktam a form.php.
    Arra gondolok, hogy cache-te a böngésző az oldalt és egy sima reload nem volt neki elég. Így folyamatosan félre vezetett.
    Mutasd a teljes hozzászólást!
  • Az a baj, hogy az FF-ben műxik az overrideMimeType és - eredetileg - az érkező text/html kódodat text/xml-ként felülírta. Így másképp értelmezte.

    Második kérdésedre válaszolva....hmmm...A szellemek látták hogy rájössz a megoldásra és továbbálltak... :D :D :D :D
    Mutasd a teljes hozzászólást!
  • Ja igen, már övegszem...
    Ez tényleg okozhatta... :)

    Szerk.:
    Lehet - hogy az Opera-ban is rendesen működjön - majd az url-hez hozzá kell raknod egy random számot, mert hajlamos mindenféle header ellenére cache-ből olvasni.. :S
    Mutasd a teljes hozzászólást!
  • Nos addig mojoltam vele, hogy:

    IE alatt kell a <table></table>
    FF alatt nem kell,de megy akkor is ha benne van.

    Csak az okát nem értem.
    Mutasd a teljes hozzászólást!
  • A Csodálatos Internet Explorer bug-os Világa...


    Ez az IE "trükkje"... :S

    Csak akkor futtatja le, ha a script tag "text node"-jába öntöd bele a cuccot. Ezt meg FF nem szereti.
    Adj egy -inline- style="display:none;"-t a table elemednek.
    (Ha bekavar)

    Vagy így:


    echo '<table style="display:none;"><script>alert("Hiba");</script></table>';

    A szebbik megoldás a creatElement használata lenne...
    Mutasd a teljes hozzászólást!
  • hmm...

    Valahogy ez a cache szívat engem.
    FF reload után nem frissíti az ajax.js -file-t.

    Így sokszor megkever.
    Mutasd a teljes hozzászólást!
  • Nyomd le a SHIFT-et és úgy bökj a refresh-re.
    Akkor mindig újratölti az egész oldalt. :)
    Mutasd a teljes hozzászólást!
abcd