AJAX nem küldi el az adatokat
2009-06-08T15:03:01+02:00
2009-06-09T10:44:17+02:00
2022-07-19T16:41:55+02:00
nszebenyi
Sziasztok!

Van egy index.php-m amiben van egy form. Ennek elvileg elkéne küldenie a formba beírt adatokat a login.php-nek de ezt nem teszi. Nem értem mi lehet a baj, eddig működött, most egy pár órája babrálom és egyszer csak azt vettem észre, hogy nem jó. Segítsetek

ajax:
function send(msg,url,callback){ var http; try{ http=new XMLHttpRequest(); } catch(e) { var XmlHttpVersions=new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"); for(var i=0;i<XmlHttpVersions.length && !http; i++){ try{ http = new ActiveXObject(XmlHttpVersions[i]) } catch(e) {} } } if ((http.readyState==4)||(http.readyState==0)){ http.open('POST',url,true); http.setRequestHeader("Content-type","application/x-www-form-urlencoded"); http.setRequestHeader("Content-length",msg.length); http.setRequestHeader("Connection","close"); http.onreadystatechange=function(){ if(http.readyState==4){ if(http.status==200){ if(callback!=null){ callback(http); } } else{ alert('Please upgrade your browser!'); } } } http.send(msg); } else{ setTimeout('send('+msg+','+callback+');',200); } } function login(){ var input_login_user = window.document.login.user.value; var input_login_passw = window.document.login.passw.value; send('user='+input_login_user'&passw='+input_login_passw,'login.php',answer); } function answer(http){ var answer = http.responseText; if (answer=="") { document.getElementById('login_info').style.display='block'; document.getElementById('login_info').innerHTML='ERROR'; } else { document.getElementById('login_info').style.display='block'; document.getElementById('login_info').innerHTML=(answer); } }

html form:
<ul> <li id="login_info" style="display:none;"><a></a></li> <li><form name="login" onsubmit="login();" class="form_login"> <input onblur="javascript:_blur_login_user(this);" onfocus="javascript:_focus_login_user(this);" value="username" class="input_login_user_off" type="text" name="user"/></li> <li><input onblur="javascript:_blur_login_passw(this);" onfocus="javascript:_focus_login_passw(this);" value="password" class="input_login_passw_off" type="text" name="passw" /></li> <li><input type="submit" onclick="login();" onblur="login();" value="Login" /></form></li> </ul>
Mutasd a teljes hozzászólást!
Első lépésben megpróbálnék jó kódot csinálni:

Weblap hibáinak részletei

Felhasználói ügynök: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB6; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Embedded Web Browser from: http://bsalsa.com/; .NET CLR 2.0.50727; InfoPath.1; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Időbélyegző: Mon, 8 Jun 2009 17:15:22 UTC


Üzenet: A várt elem ')'
Sor: 39
Karakter: 31
Kód: 0
URI: http://users.atw.hu/ishare/teszt/ajax.js





Tehát kijavítanám:
send('user='+input_login_user'&passw='+input_login_passw,'login.php',answers);

send('user='+input_login_user+'&passw='+input_login_passw,'login.php',answers);

Utána kisérleteznék a működtetésével.
Mutasd a teljes hozzászólást!

  • tegyél bele alert()-eket, hogy megtudd hol akad el a kód.

    legfőképp alert(answer);
    alert(msg+url)
    Mutasd a teljes hozzászólást!
  • Úgy nézem valami "más" a baj.

    Elvileg ugyebár a login.php-nek kéne átadnia a form adatait viszont ehelyett a magának az index.php-nek adja át. Amikor elküldöm a formot akkor a címsorban az index.php mögött megjelenik, hogy "?user=username&passw=password"

    De miért nem jó helyre küldi Itt babrálom de nem jó!
    és most nézem (de erre nyitok másik topikot természetesen), hogy újratölti az oldalt... mintha nem is lenne ajax. Mi a bánatot rontottam el ennyire ?
    Mutasd a teljes hozzászólást!
  • Csak találgatok, de esetleg az input type="submit" ne submit legyen, hanem button.
    Mutasd a teljes hozzászólást!
  • Ez hihetetlen. Egyszerűen nem jövök rá, hogy mi a baj. Akár hányszor átnézem az egész kódsort egy árva hibát nem találok. Mi a búbánatos ló izét rontok el.

    S.O.S.
    Mutasd a teljes hozzászólást!
  • Szerintem az elejét ne bonyolítsd...
    var html = false; if (window.XMLHttpRequest) { html = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { html = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { html = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { return false; } } } else { return false; }
    Mutasd a teljes hozzászólást!
  • A submit gomb hatására a böngésző elküldi a form-ot. Vagy sima gomb legyen (<button> vagy input type="button") és annak onclick eseménykezelőjére tedd a login() hívást (form ez esetben nem kell), vagy pedig a login() végére tegyél bele egy return false; sort, mert ez esetben a böngésző nem küldi el a form-ot. De ajax esetén nincs szükség form-ra...
    Mutasd a teljes hozzászólást!
  • Lehet, hogy a php-mel van baj? Egyébként úgy veszem észre, hogy a login.php semmilyen adatot sem kap. Ha nem kap adatot akkor csinálnia kéne egy nincs.txt file-t amit nem készít el. Magyarán meg sem hívja a login.php-t


    if(isset($_POST['user'])) { $open = fopen("hehe.txt","w+"); $write = fwrite($open,"lol"); if($_POST['user'] == "teszt" && $_POST['passw'] == "teszt") { print 'bejelentkezve mint: ' . $_POST['user']; } else { print 'hibás'; } } else { $open = fopen("nincs.txt","w+"); $write = fwrite($open,"lol"); }
    Mutasd a teljes hozzászólást!
  • Jelenleg:
    <input type="button" onClick="login();" onBlur="login();" value="Login" />
    Mutasd a teljes hozzászólást!
  • A buttonos dolog lenne a következő topic. :)
    Mutasd a teljes hozzászólást!
  • Igen, a baj az, hogy a login.php-t effektíve meg sem nyitja/hívja. Pedig már minden nyavaját kipróbáltam amit én tudok
    Mutasd a teljes hozzászólást!
  • onsubmit="return login();"

    az összes helyen töröld ki a login hívást, és helyette a form.submit()-ot hívd.

    a login függvény meg adjon vissza false értéket, így az onsubmit="return ->false;" letiltja az űrlap rendes küldését, és csak az ajaxos kérés fog lefutni, nem lesz újratöltve az oldal.
    Mutasd a teljes hozzászólást!
  • köszönöm, ez biztos jó de már többek tanácsára <input type="button"-ra váltottam "submit"-ról így szintén nem tölti újra. A baj viszont az, hogy most éppen semmilyen adatot nem küld el! Maga az xmlhttprequest-em jó, mert ha másik function-t írok akkor az működik tehát a baj itt van:
    function login(){ var input_login_user = window.document.login.user.value; var input_login_passw = window.document.login.passw.value; send('user=' + input_login_user + '&password=' +input_login_passw,'login.php',answer); } function answer(http){ var answer = http.responseText; if (answer=="") { document.getElementById('login_info').style.display='block'; document.getElementById('login_info').innerHTML='ERROR'; } else { document.getElementById('login_info').style.display='block'; document.getElementById('login_info').innerHTML=(answer); } }

    de, hogy mi a gond azt a jó isten sem tudná megmondani
    Mutasd a teljes hozzászólást!
  • folytatás:

    <input id="user" ....> document.getElementById("user").value;
    Name helyett id-vel azonosítsd az inputokat.


    'user='+input_login_user+'&passw='+input_login_passw
    ehelyett:
    'user='+input_login_user'&passw='+input_login_passw


    Ezt abszolut nem értem, valami elvakult hülyeség:
    if ((http.readyState==4)||(http.readyState==0)) { } else { setTimeout('send('+msg+','+callback+');',200); }

    Nem vagyok biztos benne, de szerintem ez nem mindig igaz:
    http.setRequestHeader("Content-length",msg.length);
    nyilván a connection close sem kell, ha ezt kitörlöd


    Szöveges üzenetre szerintem inkább response-t szoktak küldeni, mint answert, de ez annyira nem fontos, viszont zavaró, hogy ugyanaz a függvény neve, mint a benne lévő változóé, egyébként meg elég a responseText-et átadni, ha már a hibakezelést az onreadystatechangen belül intézed.

    alert('Please upgrade your browser!');
    Hát ez meg röhejes. Ezek szerint ha hiba van a kapcsolatban vagy szerver oldalon, akkor töltsem le az ff legújabb változatát...
    Mutasd a teljes hozzászólást!
  • nyilván igazad van de azért mutatnék egy működő példát ahol nem id alapján azonosítunk és mellesleg működik, meglehetősen jól

    FORRÁS

    EXAMPLE

    user: admin passw: admin

    ezért nem értem. Én is így csináltam mindent és nem működik. De várj, 2-3 perc és kipróbálok mindent amit írtál
    Mutasd a teljes hozzászólást!
  • Attól, hogy működik még nem jó. Nem követi a szabványt.
    Mutasd a teljes hozzászólást!
  • Sajnos még azt sem tudom mi lenne a szabványos

    Tudnál mutatni nekem egy tökéletesen szabványos AJAX lekérdezést ami minden egyes böngészőt támogat? Persze már ami támogatja az xmlHttpRequest-et!

    Próbálgattam de sajnos így sem :S

    Viszont ha csinálok egy másik function-t az működik:
    function teszt(){ send('user=teszt','login.php',valaszok); } function valaszok(){ var valasz = http.responseText; }

    Mutasd a teljes hozzászólást!
  • Megvan a tettes

    ha ezt átalakítom:
    function login(){ var input_login_user = document.getElementById("user").value; var input_login_passw = document.getElementById("passw").value; send('user='+input_login_user'&passw='+input_login_passw,'login.php',valaszok); }

    erre:
    function login(){ var input_login_user = document.getElementById("user").value; send('user='+input_login_user,'login.php',valaszok); }

    magyarán a jelszót nem akarja valamiért elküldeni.

    ha már kiderült, hogy kicsit sem szabványos a kódom akkor varaki árulja el, hogy hol tájékozódhatnék arról, hogy mi az ami 100%-ig szabványos ajax script és a lehető legnagyobb mértékben kompatibilis a böngészőkkel?!
    Mutasd a teljes hozzászólást!
  • A name="passw"-nál van id="passw" is?

    Nem törlődik az értéke?

    send('user='+input_login_user'&passw='+input_login_passw,'login.php',valaszok);

    elé tegyél egy
    alert('user='+input_login_user'&passw='+input_login_passw);
    sort. Jót ír ki?
    Mutasd a teljes hozzászólást!
  • Igen, van id="passw" a name-et ki is szedtem!

    A helyzet az, hogyha a send-ben szerepel a jelszó elküldése akkor az egész ajax nem megy és az alert sem jön ki! Ha kiveszem és csak a felhasználónevet akarom küldeni akkor működik és az alert-ben meg is jelenik.

    Egyszerűen nem értem mi a baja a jelszó inputommal:


    <input onblur="javascript:_blur_login_passw(this);" onfocus="javascript:_focus_login_passw(this);" value="password" class="input_login_passw_off" type="text" id="passw" />

    tudom-tudom... látom, hogy a jelszó mező type="text" de ezt lecserélem "password"-ra amikor beleklikkel a kliens. Mielőtt jönne a válasz/kérdés, hogy biztos ez kavar be, most szólok, hogy nem, mert megpróbáltam úgy is, hogy kiszedem és alapból password-ra állítom de úgy sem. Egyszerűen csak akkor működik az ajax ha nincs benne a passw input az ajax küldés-ben
    Mutasd a teljes hozzászólást!
  • <input onblur="javascript:_blur_login_passw(this);" onfocus="javascript:_focus_login_passw(this);" value="password" class="input_login_passw_off" type="text" id="passw" name="passw" />


    function login(){ alert(document.getElementById("passw").value);

    Kiírja a jelszót?
    Mutasd a teljes hozzászólást!
  • Igen kiírja

    de csak akkor ha a send()-ben nincs benne a password mező küldése. Mert ha benne van akkor az egész ajax nem működik és hiába nyomom meg a gombot nem történik semmi.

    de így kírta:

    send('user='+input_login_user,'login.php',answers);
    Mutasd a teljes hozzászólást!
  • function login(){ var input_login_user = document.getElementById("user").value; var input_login_passw = document.getElementById("passw").value; alert('user='+input_login_user'&passw='+input_login_passw) // Ez kiírja? send('user='+input_login_user'&passw='+input_login_passw,'login.php',valaszok); }


    1. A send() függvény első sorába irasd ki, hogy mit kapott paraméterként.
    Ott még jó?

    2. FF-ben nézd mega hibakonzol nem ad valami üzenetet?

    3. Meg lehet nézni az Interneten?


    Mutasd a teljes hozzászólást!
  • Nem, az alert sem jelenik meg!

    ff hibakonzol:

    missing ) after argument list
    http://localhost/teszt/js/ajax.js
    alert('user='+input_login_user'&passw='+input_login_passw) // Ez kiírja?


    login is not defined
    http://localhost/teszt

    ennyi az össz amit kiír! természetesen látom, hogy a ";"-ot lefelejtetted de ezt pótoltam. így sem jelenik meg az alert

    send fügvény első soránál hogy iratom ki?
    Mutasd a teljes hozzászólást!
  • Hát én nem tudom mi a búbánat baja lehet ennek. Úgy látszik senki sem jön rá - én sem. No mindegy, ez van.
    Mutasd a teljes hozzászólást!
  • missing ) after argument list

    Keresd meg, hogy melyik soron.

    pl. ha
    function send(msg,url,callback){

    akkor
    alert(msg)


    Mutasd a teljes hozzászólást!
  • Micu, nem érted. Bár hova is teszek alert-et az nem jelenik meg, mert ha a send() tartalmazza az passw mező lekérdezését akkor olyan, mintha az egész script nem működne!

    Ha kiveszem akkor meg csak a username-et írja ki!
    Mutasd a teljes hozzászólást!
  • 3. Meg lehet nézni az Interneten?
    Mutasd a teljes hozzászólást!
  • Várj felpakolom valahova. Kb 5 perc. Pillanat
    Mutasd a teljes hozzászólást!
  • Mutasd a teljes hozzászólást!
abcd