Autor | Zpráva | ||
---|---|---|---|
mark Profil |
#1 · Zasláno: 19. 11. 2008, 21:35:29
zdravím, s AJAXom začínam.
Mám súbor index.php: <script> sendRequest("retazec, spracuj.php"); function createXhr () { var xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest (); } else { if (window.ActiveXObject) { try { xhr = new ActiveXObject ("Msxml2.XMLHTTP"); } catch (e) { try { xhr = new ActiveXObject ("Microsoft.XMLHTTP"); } catch (e) {} } } return xhr; } } function sendRequest (data, url) { var xhr = createXhr (); if (xhr) { xhr.open ("POST", url); xhr.onreadystatechange = function () { if (receiveResponse (xhr)) xhr = null; }; xhr.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded"); xhr.send (data); } return xhr; } </script> A mám tiež súbor spracuj.php: <?php mysql_connect("server", "login", "heslo"); mysql_select_db("databaza"); $text = "nejaky_retazec"; mysql_query("insert into tabulka (text) values ('".$text."')"); ?> Keď načíta index.php, mala by sa spustiť funkcia, ktorá odošle AJAXom dáta serveru a ten spustí zápis do databázy (na začiatok obyčajný text a nie preposlaná premenná). Lenže skripty nefungujú. Žiadne dáta sa do databázy neodošlú, pritom súbor spracuj.php keď samostatne spustím, funguje. Neviete prosím, v čom je chyba? Neviem si rady. ďakujem. |
||
bohyn Profil |
#2 · Zasláno: 19. 11. 2008, 22:41:16
sendRequest("retazec", "spracuj.php"); |
||
mark Profil |
#3 · Zasláno: 19. 11. 2008, 22:50:40
nefunguje....
doplním ešte: mám to na localhoste, som pripojený na databázu a súbor index.php tiež vytvoril spojenie XMLHttpRequest, čiže chyba možno bude v nejakých mojich nastaveniach, alebo vo funkcii sendRequest. |
||
mark Profil |
#4 · Zasláno: 19. 11. 2008, 22:51:03
ale kde, to netuším.....
|
||
srigi Profil |
#5 · Zasláno: 20. 11. 2008, 08:00:52
Tie data, ktore "cpes" do xhr.send (data) musis spravne naformatovat! Sprav to napr. takto:
xhr.send(getInputVal()); function getInputVal() { var text1 = document.getElementById('twn').value; town = 'town=' + encodeURI(text1); // UTF-8 friendly encoding return town; } A to je vsetko, malo by to fungovat. Este odporucam dve veci: 1. ak pouzivas UFT-8 kodovanie (mal by si), tak uprav header takto: xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 2. inicializaciu httpxml objektu trocha rozsir o vetvu, ked AJAX nie je podporovany. Ja to mam spravene takto: if (window.XMLHttpRequest) { httpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { try { httpRequest = new ActiveXObject('Microsoft.XMLHTTP'); } catch(e) { httpRequest = new ActiveXObject('Msxml2.XMLHTTP'); } } else { alert('Prehliacač nepodporuje technológiu AJAX'); } |
||
Chamurappi Profil |
#6 · Zasláno: 20. 11. 2008, 08:15:17 · Upravil/a: Chamurappi
Reaguji na srigiho:
Připadá mi docela hloupé dávat alert do funkce, která má vytvářet instanci XMLHttpRequestu. Logicky tam nepatří. Nejde-li AJAX, vrať null. Dostaneš-li null, pak teprve můžeš zařvat na uživatele (a když už, tak nějak srozumitelně). Reaguji na marka: Chybu máš ve funkci createXhr, v případě, že existuje třída window.XMLHttpRequest, sice naplníš proměnnou xhr, ale už ji nevrátíš. |
||
srigi Profil |
#7 · Zasláno: 20. 11. 2008, 11:56:32 · Upravil/a: srigi
Chamurappi
No vies, momentalne tiez s AJAXom iba experimentujem a moje skripty su ploche (bez funkcii) - okrem tej jednej getInputVal(). |
||
mark Profil |
#8 · Zasláno: 20. 11. 2008, 16:07:58
Takže ako má prosím Vás vyzerať správne celý kód?
|
||
srigi Profil |
#9 · Zasláno: 20. 11. 2008, 16:46:16
|
||
Časová prodleva: 17 dní
|
|||
mark Profil |
#10 · Zasláno: 7. 12. 2008, 19:06:58
Tak sa mi s tým podarilo niečo spraviť. Maximálne som to zjednodušil:
function createXhr () { var xhr = null; if (window.XMLHttpRequest) {xhr = new XMLHttpRequest ();} else {if (window.ActiveXObject) {xhr = new ActiveXObject ("Msxml2.XMLHTTP");} return xhr;} } var xhr = createXhr (); xhr.open ("GET", "spracuj.php"); xhr.send ("retazec"); Skript mi však funguje len v IE (a to mám dokonca experimentálnu 4. verziu). V mozille (3.0) a opere (9.6) nefunguje, čo ma prekvapilo. Neviete, ako spraviť, aby fungoval vo všetkých prehliadačoch? Ako bude vizerať celý kód? ďakujem.... |
||
Časová prodleva: 15 let
|
0