Stránka: 1 z 1
| [ Príspevkov: 25 ] | |
Autor | Správa |
---|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
Ahojte, povedzme že mám klasické input pole kde niečo napíšem a kliknem vedľa (onblur) sa mi povedzme pod tým zobrazí div v ktorom sa spustí určitá php funkcia,
proste potrebujem aby sa vždy keď kliknem vedľa toho môjho pola aby sa v tom dive spustila tá funkcia, s parametrom toho čo mam v poli napísané
a povedzme kým sa php skript nenačíta tak bude písať Loading
pretože tá funkcia sa bude vykonávať určitu dobu
Ďakujem
|
|
Registrovaný: 28.06.09 Prihlásený: 18.12.09 Príspevky: 78 Témy: 1 | 1 Bydlisko: Presov |
Odporucam pouzit nejaky framework napr. prototype (jquery, mootols atd.):
http://www.prototypejs.org/learn/introduction-to-ajax
ak tomu inputu das id tak potom je lahke k tomu pristupovat....
napr.
<input name="in" id="in" value ="xxx" />
ak das v JS alert($F('in')) malo by ti vypisat 'xxx' resp. co tam zmenis.
_________________ Blogujem teda zijem. Link v profile. |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Neodporucam pouzit ziaden framework, nic sa nenaucis a bude sa to vykonavat pomalsie.
Proste tomu inputu pridelis onblur="funkcia()", pricom funkcia bude obsahovat:
- na zaciatku vytvori box s napisom Loading
- spusti normalny http request GET metodou
- ked bude readyState==4, teda vsetko prebehlo, obsah toho boxu sa nahradi responseText-om, teda tym, co vypisala ta php funkcia. Pokial nema ta fcia vypisovat nic, ten box sa proste odstrani (a v podstate vtedy moze http request prebehnut HEAD metodou, netreba GET)
Mozem sa na to pozriet a potom ti sem hodim kod, ak to nevies spravit sam.
|
|
Registrovaný: 28.06.09 Prihlásený: 18.12.09 Príspevky: 78 Témy: 1 | 1 Bydlisko: Presov |
Kód: Neodporucam pouzit ziaden framework, nic sa nenaucis a bude sa to vykonavat pomalsie.
Suhlas, cez framework je to ale podstatne jednoduchsie a dramaticky pomalsie zase nie
_________________ Blogujem teda zijem. Link v profile. |
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
no tak vieš mi to nejak napísať?
lebo povedzme že ja potrebujem vykonať najakú funkcu ktorej výsledkom bude text
teda povedzme echo funkcia(hodnota);
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Kód: <!DOCTYPE html> <title></title> <meta charset=utf-8> <style> #loading { /*tu si mozes box s loadingom a neskor s vysledkom fcie lubovolne nastylovat*/ } </style> <script> if (!window.XMLHttpRequest) { XMLHttpRequest = function() { return new ActiveXObject('Microsoft.XMLHTTP'); } } function ajax() { if (!document.getElementById('loading')) { var div = document.createElement('div'); div.setAttribute('id', 'loading'); div.innerHTML = 'Loading'; document.body.appendChild(div); } else { var div = document.getElementById('loading'); div.innerHTML = 'Loading'; } var xhr = new XMLHttpRequest(); xhr.open('GET', 'tvojphpskript.php', true); xhr.send(null); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { div.innerHTML = xhr.responseText; /* ten Loading ti preblikne mozno dost rychlo, podla toho, co tam mas v tom php skripte, tak si mozes nastavit setTimeout */ } } } </script> <input type=text onblur="ajax()">
jozef.rusnak - su tu taki uzivatelia, co s jQuery toho dokazu dost vela, ale obycajny javascript nepoznaju prakticky vobec. Preto nerad odporucam frameworky.
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ok toto ide, a teraz ako do toho dostanem svoje parametre?
potrebujem tam dostať jedno číslo, vegenerované php kódom, povedzme premennu $cislo
a to čo užívateľ vložil do toho poľa, ako na to?
to $cislo by asi šlo aj takto
Kód: xhr.open('GET', 'tvojphpskript.php?cilso=<?php echo $cislo; ?>', true);
ale ten text by som radšej posielal cez post nie GET
dúfam že chápeš
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Kód: var xhr = new XMLHttpRequest(); xhr.open('POST', 'tvojphpskript.php', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); if (xhr.overrideMimeType) { xhr.setRequestHeader('Connection', 'close'); } xhr.send('cislo='+encodeURIComponent('nejaka hodnota'));
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ok to funguje
ale ešte potrebujem to čo je v tom poli odoslať do skriptu
Kód: <!DOCTYPE html> <title></title> <meta charset=utf-8> <style> #loading { /*tu si mozes box s loadingom a neskor s vysledkom fcie lubovolne nastylovat*/ } </style> <script> if (!window.XMLHttpRequest) { XMLHttpRequest = function() { return new ActiveXObject('Microsoft.XMLHTTP'); } } function ajax() { if (!document.getElementById('loading')) { var div = document.createElement('div'); div.setAttribute('id', 'loading'); div.innerHTML = 'Loading'; document.body.appendChild(div); } else { var div = document.getElementById('loading'); div.innerHTML = 'Loading'; } var xhr = new XMLHttpRequest(); xhr.open('POST', 'tvojphpskript.php', true); xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); if (xhr.overrideMimeType) { xhr.setRequestHeader('Connection', 'close'); } xhr.send('cislo='+encodeURIComponent('nejaka hodnota')); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { div.innerHTML = xhr.responseText; /* ten Loading ti preblikne mozno dost rychlo, podla toho, co tam mas v tom php skripte, tak si mozes nastavit setTimeout */ } } } </script> <input type=text onblur="ajax()">
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Odoslat "do skriptu" mozes jedine vypisanim (echo) v tom php skripte, to vypisane mas v xhr.responseText.
Mozno, keby si vypisal PHPckom nieco taketo:
Kód: {prvyindex: 'prvahodnota', druhyindex: 'druhahodnota'} tak by si mohol pomocou Kód: eval('var pole='+xhr.responseText+';'); vytvorit to javascriptove pole.
Osobne by som ale predavanie akychkolvek dat z PHP do JS riesil tak, ze PHPckom vygenerujem (well-formed) XML subor, ktorym by sa dalo javascriptom vyberat data klasicky DOMom. Akurat by si nepouzil xhr.responseText, ale xhr.responseXML.
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
no dobre ale ako do toho skriptu to teda dám?
proste ako mam
xhr.send('cislo='+encodeURIComponent('nejaka hodnota'));
tak potrebujem odoslať ešte jednu hodnotu a to tú čo je v mojom poli ( v tom inpunte)
lebo ja JS nechápem, ja som skôr na php takže prosím skús mi to spraviť
Ďakujem
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Rovnako ako ked spajas parametre v query stringu.
Kód: xhr.send('premenna1='+encodeURIComponent('hodnota1')+'&premenna2='+encodeURIComponent('hodnota2'));
|
|
Registrovaný: 26.12.06 Prihlásený: 16.11.19 Príspevky: 3971 Témy: 181 | 181 Bydlisko: Nitra / Bra... |
Ďuri píše: /* ten Loading ti preblikne mozno dost rychlo, podla toho, co tam mas v tom php skripte, tak si mozes nastavit setTimeout */
já by som sa chcel opýtať, či sa nejako dá zistiť, ako dlho trvalo to spracovanie, aby som nastavil ten timeout iba v prípade, že preberanie výsledku trvá fakt krátky čas...
hádam som to nenapísal jak mongol
_________________ Sorry za prelkepy |
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Jasne, predtym, ako vytvoris objekt XMLHttpRequest-u, si zapis do nejakej premennej aktualny cas v mikrosekundach (google javascript microtime) a do druhej premennej zapises aktualny cas vnutri tej vetvy if (xhr.readyState == 4). Potom to len od seba odcitas a podla moznosti nastavis setTimeout.
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
Ďuri píše: Rovnako ako ked spajas parametre v query stringu. Kód: xhr.send('premenna1='+encodeURIComponent('hodnota1')+'&premenna2='+encodeURIComponent('hodnota2'));
ok ale ja nechapem ako dosiahnem to že v encodeURIComponent(' hodnota2') bude to čo mam napísané v tom poli
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Viacerymi sposobmi...
Kód: document.getElementById('id-inputu').value Kód: document.forms.nameformu.nameinputu.value
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ahoj, ešte by som chcel vedieť jednu vec
nedá sa nastaviť kódovanie?
nejak ako toto
xhr.open('GET', 'tvojphpskript.php', true);
proste kódovanie...
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Neda. Javascript odosiela a prijima obsah v takom kodovani, v akom je ulozeny subor, ktory js skript obsahuje. Najlepsie je mat _vsetko_ v UTF-8 a mas po problemoch.
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
a keď mam všetko v
Windows-1250? a nefunguje mi to?
nedá sa to nejak obísť?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Ktore znaky sa nespravne zobrazuju? Ale mozes vyskusat
Kód: xhr.overrideMimeType("text/html;charset=Windows-1250");
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
okej vložil som to za Kód: xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); a funguje, ešte potrebujem aj naopak že to čo zadám do poľa že sa odošle v Windows-1250
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
ok to som vyriešil tak že som si to prekonvertoval v php...
a teraz neviete mi poradiť že prečo mi to nejde na Opere a ani na IE
na FF a GoogleChrome to ide v pohode?
ale keď mam stranku v UTF-8 a nepoužijem xhr.overrideMimeType("text/html;charset=Windows-1250"); tak to ide aj v opere a aj v IE ...
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Aha, overrideMimeType funguje iba vo Firefoxe a Safari. Stale nechapem, preco si nedas vsetko do UTF-8.
|
|
Registrovaný: 20.03.08 Prihlásený: 08.03.17 Príspevky: 596 Témy: 149 | 149 Bydlisko: Houston, Texas |
no dobre, to som vyriešil prekonverovaním vstupu aj výstupu, ale zaujíma ma
Kód: if (xhr.overrideMimeType) { xhr.setRequestHeader('Connection', 'close'); }
a si povedal že
Ďuri píše: Aha, overrideMimeType funguje iba vo Firefoxe a Safari.
tak teraz neviem, ten skript mi správne pôjde len vo Firefoxe a Safari?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 | 34 Bydlisko: Brno |
Nie, to Connection: close je riesenie nejakej chyby vo Firefoxe. A na identifikaciu, ci ide o Firefox, sa pouziva presne to overrideMimeType.
|
|
Stránka: 1 z 1
| [ Príspevkov: 25 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v JavaScript, VBScript, Ajax | 1 | 425 | 10.08.2009 10:57 awtt | | v JavaScript, VBScript, Ajax | 2 | 680 | 11.09.2009 17:35 Unlink | | v JavaScript, VBScript, Ajax | 2 | 443 | 01.06.2010 12:55 Draex | | v JavaScript, VBScript, Ajax | 2 | 748 | 25.02.2009 19:40 emer | | v PHP, ASP | 7 | 1707 | 26.10.2009 16:00 Achtan | | v PHP, ASP | 2 | 279 | 27.06.2013 19:53 maťo* | | v PHP, ASP | 5 | 577 | 24.02.2011 19:43 camo | | v PHP, ASP | 4 | 673 | 15.02.2012 15:09 d0.0b | | v PHP, ASP | 1 | 620 | 09.07.2007 21:25 javo | | v PHP, ASP | 4 | 523 | 07.02.2014 13:46 neopagan | | v PHP, ASP | 4 | 646 | 14.01.2009 6:58 JanoF | | v Redakčné systémy | 7 | 550 | 05.10.2007 13:28 fanthomas | | v Databázy | 1 | 668 | 24.05.2011 9:29 ThePlaky | | v PHP, ASP | 7 | 957 | 07.02.2011 0:08 neopagan | | v PHP, ASP | 2 | 1242 | 28.12.2009 22:08 shaggy | | v PHP, ASP | 3 | 468 | 09.02.2011 10:33 stenley |
|