Ajaxal div frissítése.
2008-06-16T16:19:37+02:00
2008-06-23T10:41:26+02:00
2022-07-26T17:31:22+02:00
mxsxs2
Hello.
(Mi előtt valaki lehord hogymár volt kérdés... Beírtam szépen a keresőbe hogy: ajax és végig olvastam minden témát...)
Van egy oldalam amiben ajax-al frissítek egy div-et.
Ez megy is egy "kis" hibával:
A php-ben amiből az ajax kiolvassa a sorokat abban táblázatok vannak, és én azt szeretném hogy az egészet kiírja a div-be. de valamiért csak az elsőt írja ki, de azt viszont hibátlanul.
js:
var ajax; function showHint(id, mit){ if(document.getElementById(id).value==""){ alert('Üres az üzenet mező.'); }else{ if(window.XMLHttpRequest){ ajax=new XMLHttpRequest(); }else if(window.ActiveXObject){ ajax=new ActiveXObject("Microsoft.XMLHTTP"); } ajax.open("post","ajaxsh/sh_feldolg.php", true); ajax.setRequestHeader("content-Type","application/x-www-form-urlencoded; charset=iso-8859-2"); ajax.setRequestHeader("Connection", "close"); if(mit==1){ ajax.send("message="+document.getElementById(id).value); }else if(mit==2){ ajax.send("del_id="+document.getElementById(id).value); } ajax.onreadystatechange=function(){ if(ajax.status==200){ document.getElementById("back").innerHTML=ajax.responseText; }else{ alert('Probléma van a visszatéréssel.'); } } } document.getElementById(shoutboxframe).location.reload(); }
php:
$sh_u=mysql_query("SELECT jog FROM nickek WHERE id=".$_SESSION['id'].""); if(mysql_num_rows($sh_u)>0){ while($sh_u_t=mysql_fetch_array($sh_u)){ $jog=$sh_u_t['jog']; } } $sh_s=mysql_query("SELECT uzenet,date,user,id,user_id FROM uzenofal ORDER BY id DESC LIMIT 0,15"); if(mysql_num_rows($sh_s)>0){ $res="<p align=\"center\">".$response."</p><table width=\"100%\">"; while($sh_t=mysql_fetch_array($sh_s)){ $datumja=explode(' ',$sh_t['date']); $datum=$datumja[0].' '.$datumja[1].' '.$datumja[2]; if($datum==date('Y. F j.')){ $date='ma '.$datumja[3]; }elseif($datum==date('Y. F j.',mktime()-84600)){ $date='tegnap '.$datumja[3]; }else{ $date=$sh_t['date']; } if($jog=1 || $jog=2){ $del="<input type=\"hidden\" name=\"del_id\" id=\"del_id\" value=\"".$sh_t['id']."\"><input type=\"button\" name=\"del\" onClick=\"showHint('del_id', 2)\" value=\"Törlés\" class=\"button\" >"; $res.="<form method=\"POST\"> <tr> <td class=\"tabletd\"> <brd><b>".$date."</b></brd> <font color=\"#c9a584\"><b>|</b></font> <a onClick=\"show('<p align=center><b><brd><font size=5>".$sh_t['user']."</font></brd></b><br><a href=".$_SERVER['PHP_SELF']."?page=data&user_id=".$sh_t['user_id']."#page>Adatlapja</a><br><a href=".$_SERVER['PHP_SELF']."?page=message&user_id=".$sh_t['user_id']."&user_name=".$sh_t['user']."#page>Üzenet küldése</a><br><a href=".$_SERVER['PHP_SELF']."?page=bugsender&user_id=".$sh_t['user_id']."#page>Bogár küldése</a></p>');\" href=\"javascript: void(0);\"><b>".$sh_t['user']."</b></a> <brd><b>:</b></brd> ".smile($sh_t['uzenet'])."</td> <td class=\"tabletd\" align=\"right\" valign=\"top\" width=\"50px\">".$del."</td> </tr> </form>"; }else{ $res.="<tr> <td class=\"tabletd\"> <brd><b>".$date."</b></brd> <font color=\"#c9a584\"><b>|</b></font> <a onClick=\"show(".$sh_t['user_id'].",'".$sh_t['user']."');\" href=\"javascript: void(0);\"><b>".$sh_t['user']."</b></a> <brd><b>:</b></brd> ".smile($sh_t['uzenet'])."</td> <td></td> </tr>"; } }$res.="</table>"; }else{ $res="<p align=\"center\"><brd><b>Sajnos még üres az üzenőfal.</b></brd></p>"; } echo iconv('ISO-8859-2', 'UTF-8', $res);
Plusz:
Ez a sor nem csinál semmit. De miért?:
document.getElementById(shoutboxframe).location.reload();
Mutasd a teljes hozzászólást!
Én a firefox web developer-jéve úgy láttam, hogy a generált js-ben lekerül a gépre, a táblázat, csak nem jelenik meg. Ez pedig azt jelenti, hogy nem letöltési gond van, hanem valami formázási.

Főleg ha azt veszem, hogy a textboxba is megjelent a táblázat forrása.

-----

pédául:
<table width="100%"><form method="post">
<tbody><tr>
A táblázatokba nem javasolt cellán kívül írni valamit tehát cserélned kellene
<form method="post"><table width="100%">
<tbody><tr>

sorrendre.


A </form>-jaid is elég érdekesek:
<p align="center">sdfsdf</p><table width="100%"><form method="post">
<tbody><tr>
<td class="tabletd">
<brd><b>ma 6:01</b></brd>
<font color="#c9a584"><b>|</b></font>
<a onclick="show('<p align=center><b><brd><font size=5>Próba1</font></brd></b><br><a href=/ajaxsh/sh_feldolg.php?page=data&user_id=12#page>Adatlapja</a><br><a href=/ajaxsh/sh_feldolg.php?page=message&user_id=12&user_name=Próba1#page>Üzenet küldése</a><br><a href=/ajaxsh/sh_feldolg.php?page=bugsender&user_id=12#page>Bogár küldése</a></p>');" href="javascript: void(0);"><b>
Próba1</b></a>
<brd><b>:</b></brd>

teszt</td>
<td class="tabletd" align="right" valign="top" width="50"><input name="del_id" id="del_id" value="212" type="hidden"><input name="del" onclick="showHint('del_id', 2)" value="Törlés" class="button" type="button"></td>
</tr>
</tbody><form method="post">
<tr>
<td class="tabletd">
<brd><b>ma 0:08</b></brd>
<font color="#c9a584"><b>|</b></font>

<a onclick="show('<p align=center><b><brd><font size=5>mxsxs2</font></brd></b><br><a href=/ajaxsh/sh_feldolg.php?page=data&user_id=1#page>Adatlapja</a><br><a href=/ajaxsh/sh_feldolg.php?page=message&user_id=1&user_name=mxsxs2#page>Üzenet küldése</a><br><a href=/ajaxsh/sh_feldolg.php?page=bugsender&user_id=1#page>Bogár küldése</a></p>');" href="javascript: void(0);"><b>
mxsxs2</b></a>
<brd><b>:</b></brd>
bcdbdbdfb</td>
<td class="tabletd" align="right" valign="top" width="50"><input name="del_id" id="del_id" value="211" type="hidden"><input name="del" onclick="showHint('del_id', 2)" value="Törlés" class="button" type="button"></td>
</tr>
</form><form method="post">
<tr>

<td class="tabletd">
<brd><b>ma 0:08</b></brd>
<font color="#c9a584"><b>|</b></font>
<a onclick="show('<p align=center><b><brd><font size=5>mxsxs2</font></brd></b><br><a href=/ajaxsh/sh_feldolg.php?page=data&user_id=1#page>Adatlapja</a><br><a href=/ajaxsh/sh_feldolg.php?page=message&user_id=1&user_name=mxsxs2#page>Üzenet küldése</a><br><a href=/ajaxsh/sh_feldolg.php?page=bugsender&user_id=1#page>Bogár küldése</a></p>');" href="javascript: void(0);"><b>
mxsxs2</b></a>
<brd><b>:</b></brd>
bcdbdb</td>

<td class="tabletd" align="right" valign="top" width="50"><input name="del_id" id="del_id" value="210" type="hidden"><input name="del" onclick="showHint('del_id', 2)" value="Törlés" class="button" type="button"></td>
</tr>
</form></form></table>sdfsdf</div> </div>

Tehát első lépésben próbáld helyes html kódra alakítani a leküldött információt (Nézd meg, hogy hol mit nyitsz és zársz)

Ha még mindig nem lesz jó, akkor írtsd ki a formázást (a css-t) az oldaladról és csak a működését nézd meg.

Mutasd a teljes hozzászólást!

  • Ha a php rutint nem ajaxból hívod meg, akkor kiírja?
    Mutasd a teljes hozzászólást!
  • Igen. Akkor hibátlan.
    Mutasd a teljes hozzászólást!
  • az ajax lefutásánál nem kell(ene) megvárni, amíg lefut? a 200 csak azt jelzi, hogy megtalálta a oldalt, de a readyState még nem 4 (azaz nem végzett). szerintem megkaptad az első sort,aztán vége is. (tedd bele a callback függvénybe a status==200 mellé a readyState == 4 feltételt is
    Mutasd a teljes hozzászólást!
  • ajax.onreadystatechange=function(){ if(ajax.readyState==4){ if(ajax.status==200){ document.getElementById("back").innerHTML=ajax.responseText; } } }

    Ugyanazt csinálja
    Mutasd a teljes hozzászólást!
  • ha feljött az alert, akkor nem 200-as volt a válasz, vagyis valami hiba van ott.

    hogy néz ki most az ajax kód?
    Mutasd a teljes hozzászólást!
  • var ajax; function showHint(id, mit){ if(document.getElementById(id).value==""){ alert('Üres az üzenet mező.'); }else{ if(window.XMLHttpRequest){ ajax=new XMLHttpRequest(); }else if(window.ActiveXObject){ ajax=new ActiveXObject("Microsoft.XMLHTTP"); } ajax.open("post","ajaxsh/sh_feldolg.php", true); ajax.setRequestHeader("content-Type","application/x-www-form-urlencoded; charset=iso-8859-2"); ajax.setRequestHeader("Connection", "close"); if(mit==1){ ajax.send("message="+document.getElementById(id).value); }else if(mit==2){ ajax.send("del_id="+document.getElementById(id).value); } ajax.onreadystatechange=function(){ if(ajax.readyState==4){ if(ajax.status==200){ document.getElementById("back").innerHTML=ajax.responseText; } } } } document.getElementById(shoutboxframe).location.reload(); }
    Mutasd a teljes hozzászólást!
  • szerintem itt lemaradt az idézőjel:
    document.getElementById(shoutboxframe).location.reload();

    sajnos a js egy hibánál teljesen leáll, és nem fut tovább.
    Mutasd a teljes hozzászólást!
  • ŐŐŐŐ upszi.
    Lemaradt egy } jel és emiatt írta ki a hibát. De lefutott...
    Úgyhogy hibásan is lefutott...
    Kipótoltam a '' jelekkel de ugyanaz még mindig..
    Az iframe nem frissül és még mindig csak az első jelenik meg.
    Mutasd a teljes hozzászólást!
  • megnéznéd így?

    var ajax; function showHint(id, mit) { if(document.getElementById(id).value=="") alert('Üres az üzenet mező.'); else { if(window.XMLHttpRequest) ajax = new XMLHttpRequest(); else if(window.ActiveXObject) ajax = new ActiveXObject("Microsoft.XMLHTTP"); ajax.open("post", "ajaxsh/sh_feldolg.php", true); ajax.setRequestHeader("content-Type","application/x-www-form-urlencoded; charset=iso-8859-2"); ajax.setRequestHeader("Connection", "close"); ajax.onreadystatechange=function() if(ajax.readyState==4 && ajax.status==200) document.getElementById("back").innerHTML=ajax.responseText; if(mit==1) ajax.send("message=" + document.getElementById(id).value); else if(mit==2) ajax.send("del_id=" + document.getElementById(id).value); } document.getElementById("shoutboxframe").location.reload(); }
    Mutasd a teljes hozzászólást!
  • egyébként én ezt get-tel csinálnám, nem post-tal. nem tudom, hogy okozhat-e ez gondot. Még ennyire nem ismerem az ajax-ot, de pl. php-ben meg kell adni a post header részében a content-length-et is.

    vagy itt lehet benne egy hosszabb szöveg is?
    Mutasd a teljes hozzászólást!
  • Az eredetiben a get-nél meg van adva.
    De én kivettem mert nem tudom annak a hosszúságát amit beír a felhasználó.
    Közben módosítottad
    Igen lehet hosszabb is.
    Mutasd a teljes hozzászólást!
  • Én is találkoztam már ezzel a problémával, hogy ha alert-et tettem be, akkor minden ok-és volt, mert addig lefutott a kód, amúgy meg nem. És akkor fel is hagytam vele! És most jutott erről eszembe egy ötlet!
    Nem tudom működne-e, de mi van, ha egy while(1) ciklusban ellenőriznéd, hogy történt-e valami változás, és ha történt, akkor kilépnél belőle! Lehet, hogy ez hülyeség... Csak az időhúzásról jutott eszembe, hogy talán jó lenne!
    Mutasd a teljes hozzászólást!
  • Nem tudom. Lehet de nem tudom megcsinálni.
    Eleven: a te kódoddal semmit nem csinál... mit ha lemaradtak volna a {} jelek.


    Szerkesztés:
    Kipótoltam és ugyanazt csinálja.
    Mutasd a teljes hozzászólást!
  • elvileg úgy rövidítettem, hogy futásképes legyen... na mindegy.

    szóval ezt találtam, hátha:

    var parameter = "message=" + encodeURI(document.getElementById(id).value); ajax.onreadystatechange = function(){...ami nálad is van...}; ajax.open('POST', url, true); ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); ajax.setRequestHeader("Content-length", parameter.length); ajax.setRequestHeader("Connection", "close"); ajax.send(parameter);
    Mutasd a teljes hozzászólást!
  • Megcsináltam és továbbra is ugyan-az.
    Most ilyen:
    var ajax; var paramater; function showHint(id, mit){ if(document.getElementById(id).value==""){ alert('Üres az üzenet mező.'); }else{ if(window.XMLHttpRequest){ ajax=new XMLHttpRequest(); }else if(window.ActiveXObject){ ajax=new ActiveXObject("Microsoft.XMLHTTP"); } if(mit==1){ parameter="message="+encodeURI(document.getElementById(id).value); }else if(mit==2){ parameter="del_id="+encodeURI(document.getElementById(id).value); } ajax.onreadystatechange=function(){ if(ajax.readyState==4 && ajax.status==200){ document.getElementById("back").innerHTML=ajax.responseText; } } ajax.open("post", "ajaxsh/sh_feldolg.php", true); ajax.setRequestHeader("content-Type","application/x-www-form-urlencoded; charset=iso-8859-2"); ajax.setRequestHeader("Content-length", parameter.length); ajax.setRequestHeader("Connection", "close"); ajax.send(parameter); } }
    Mutasd a teljes hozzászólást!
  • azt nem értem, hogy az alert feljött, akkor azt jelenthette, hogy hiba volt... vagy nem is tudom...

    én ilyenkor azt szoktam csinálni, hogy beleteszek a kódva egy alert(0)-t, az elejétől kezdve. ha feljön, akkor addig tuti lefutott a kód. ha stimm, akkor 1 sorral hátrébb rakom. ha lefut, akkor oké, megint hátrébb egy sorral. ha nem jön fel, akkor az alert előtti sorban hiba lehet. persze ettől még lehet benne valahol logikai hiba is.

    az az egy sor ami lejön, az jó? mármint hogy annak kell lejönnie, csak még hozzá több sor is kellene?
    Mutasd a teljes hozzászólást!
  • nálam ez a kód egy az egyben működik

    vagyis annyi eltéréssel, hogy a parameter értékét nem az oldalról szedtem, hanem megadtam előre egy fix értéket, és az első if feltételt (...value=="") nem néztem. szóval letöltötte a többsoros választ minden gond nélkül
    Mutasd a teljes hozzászólást!
  • Az előttem szólónak: Neked azért működhetett rendesen, mert elég gyorsan megtörtént a kérésre a válasz.

    Én is bele futottam ebbe a hibába, és még nem tudtam megoldani, vagyis nem foglalkoztam vele. Ha gyors megoldás kell, akkor javaslom, használd a prototype nevű függvénygyűjteményben találhatót. Garantáltam működik, 60e userrel tesztelt. :) Amúgy, ahogy néztem, Objektum orientáltan meg lehet oldani, de érzésem szerint nélküle is valahogy. Most viszont megint elkezdett érdekelni a dolog, megpróbálok, rájönni és bemásolom ide a kódot. Addig is, hogy ne ezen álljon a projected: prototype.
    Mutasd a teljes hozzászólást!
  • hát nem tudom, használom kb. ugyanezt a kódot máshol, ott van hogy 4-5 sec is kell, hogy lefusson. nem láttam arra utaló jelet, hogy függene bármi is a lefutási időtől. de passz...
    Mutasd a teljes hozzászólást!
  • amikor atadod innerHTML -lel a stringet figyelj a sortores, es aposztrofkezelesre, sztem ez a hiba.

    Ajanlom hogy az atadando sztinget modositsd ugy hogy ne legyen benne uj sor "karakter" (\r\n).

    Probald ki ,ird le mi tortent.
    Mutasd a teljes hozzászólást!
  • Elvileg pedig a lefutási időtől is függ, bár ez csak elmélet.
    Ezért működik neki, ha alert-el.
    Mutasd a teljes hozzászólást!
  • Csináltam egy tesztet, hagytam, hogy 20 percig fusson egy ciklus, és minden rendbe volt. Ezek szerint tényleg nem függ az időtől. Ez legalább kizárva.
    Bár lenne egy kérdésem, több ajax kérés is van? Esetleg ciklusba szervezve, és nyílván ugyanazt a request fgv-t használják?
    Mutasd a teljes hozzászólást!
  • Most nincs rá ötletem, de bemásolom azt, ami 20 perc várakozás után is tudta mi a dolga. Hátha segít.


    function ajaxRequest(url) { if (window.XMLHttpRequest) { // Non-IE browsers req = new XMLHttpRequest(); req.onreadystatechange = processStateChange; try { req.open("GET", url, true);} catch (e) {alert(e);} req.send(null); } else if (window.ActiveXObject) { // IE req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.onreadystatechange = processStateChange; req.open("GET", url, true); req.send(); } } } /*------------------------------------------------------------------------------ ------------------------------------------------------------------------------*/ function processStateChange() { if (req.readyState == 4) { // Complete if (req.status == 200 ) { alert(req.responseText); } else { alert("Problem: " + req.statusText);} } }
    Mutasd a teljes hozzászólást!
  • hát azt is meg lehetne adni az .open()-nél, hogy a harmadik paraméter: false, vagyis addig álljon a js, amíg be nem fejeződik a folyamat (megvárja a lekérés legvégét).

    ilyenkor nem kell callback függvény sem, hanem a send után rögtön kinyerhető a válasz a .responseText-ből. (hiszen a send feldolgozása után vár a feldolgozás)
    Mutasd a teljes hozzászólást!
  • eleven:
    Egy komplett táblázatnak kéne lejönnie. De ez valamiért csak az első <tr></tr> közötti részt hozza le.
    Dodi1983:
    Nem ismerem ezt a prototype-ot.
    Telsejesn ugyanezt a fgv- még használja egy törlés de annál is csak azt az egy sort írja ki.
    vaszev:
    <table width="100%"><form method="POST"> <tr> <td class="tabletd"> <brd><b>ma 12:21</b></brd> <font color="#c9a584"><b>|</b></font> <a onClick="show('<p align=center><b><brd><font size=5>mxsxs2</font></brd></b><br><a href=/index2.php?page=data&user_id=1#page>Adatlapja</a><br><a href=/index2.php?page=message&user_id=1&user_name=mxsxs2#page>Üzenet küldése</a><br><a href=/index2.php?page=bugsender&user_id=1#page>Bogár küldése</a></p>');" href="javascript: void(0);"><b>mxsxs2</b></a> <brd><b>:</b></brd> valami2</td> <td class="tabletd" align="right" valign="top" width="50px"><input type="hidden" name="del_id" id="del_id" value="125"><input type="button" name="del" onClick="showHint('del_id', 2)" value="Törlés" class="button" ></td> </tr> </form><form method="POST"> <tr> <td class="tabletd"> <brd><b>ma 12:21</b></brd> <font color="#c9a584"><b>|</b></font> <a onClick="show('<p align=center><b><brd><font size=5>mxsxs2</font></brd></b><br><a href=/index2.php?page=data&user_id=1#page>Adatlapja</a><br><a href=/index2.php?page=message&user_id=1&user_name=mxsxs2#page>Üzenet küldése</a><br><a href=/index2.php?page=bugsender&user_id=1#page>Bogár küldése</a></p>');" href="javascript: void(0);"><b>mxsxs2</b></a> <brd><b>:</b></brd> valami</td> <td class="tabletd" align="right" valign="top" width="50px"><input type="hidden" name="del_id" id="del_id" value="124"><input type="button" name="del" onClick="showHint('del_id', 2)" value="Törlés" class="button" ></td> </tr> </form></table>
    Ha csak két üzenet van benne akkor ennek kéne átjönnie.
    E-helyett lejön az első <tr></tr> közötti rész.
    Ennyire bezavarnának a sortörések és a "' jelek?
    Esetleg a js nem zavarhat be neki?
    Ami amúgy tökéletesen működik akkor is mikor az az egy sor átjön akkor is.

    Egy érdekesség ami mindenkinek szól:
    Lementettem az egész oldalt a böngészőből és akkor meg megjelent az egész. Vagyis a js megkapja az adatokat de valamiért csak egyet ír ki:S
    Mutasd a teljes hozzászólást!
  • akkor ennyi jön le?

    ma 12:21 | mxsxs2 : valami2
    Mutasd a teljes hozzászólást!
  • elég magas a div/td/egyéb, amibe rakod a választ?
    Mutasd a teljes hozzászólást!
  • Igen annyi jön le csak táblázatban.
    Elég magas.
    (Egy div értékek nélkül)
    Mutasd a teljes hozzászólást!
  • az viszont nem 1 sor. mármint html kód szempontból több sornyi adat. érdekes...
    Mutasd a teljes hozzászólást!
abcd