![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 675 Pomógł: 15 Dołączył: 7.11.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
WITAM!!!
Widziałem kilka projektów AJAX typu suggestion tool i sam postanowiłem zbudować podobny w oparciu o bibliotekę advAJAX. Działanie jest proste - użytkownik wpisuje słowo, jeśli w bazie danych są podobne, to wyświetlane jest okno podpowiedzi, jesli nie, to musi sam dokończyć wpisywanie ![]() Efekt pracy przedstawię poniżej, ale nie jest to w 100% działający projekt, ponieważ po wyborze słowa (jak są polskie litery, np. brązowy), a następnie skasowaniu z niego kilku ostatnich liter - w oknie podpowiedzi nie wyświetla się nic, dopóki są polskie litery (miły wyjątek stanowi przeglądarka IE). Jak ktoś będzie wiedział jak to rozwiazać to proszę, oraz proszę o wypowiedzenie się na temat tego "narzędzia"... Pliki wchodzące w skład projektu: Oczywiście wymagany jest plik advajax.js Baza danych z której są pobierane słowa:
Plik start.html zawierający prosty formularz:
Plik suggest.js wykorzystujący AJAX: Kod function $(id) { return document.getElementById(id); } // zmiana koloru wiersza (onmouseover) function highlight() { this.className = "highlight"; } // zmiana koloru wiersza (onmouseout) function unHighlight() { this.className = "unhighlight"; } // akceptacja podpowiedzi function selectWord() { $("string").value = this.innerHTML; $("suggestion").style.display = "none"; } // konwersja dokumentu XML na elementy span function parseRecords(xml) { // zapisanie danych bieżącej strony with (xml.getElementsByTagName("words").item(0)) { var count = getAttribute("count")*1; } if(count == 0) $("suggestion").style.display = "none"; // wpisanie odpowiednich słów do pola suggestion var space = $("suggestion"); space.innerHTML = ""; // wyczyszczenie poprzedniej listy var word = xml.getElementsByTagName("word"); for (i = 0; i < word.length; i++) { spanNode = document.createElement("span"); spanNode.innerHTML = word[i].childNodes[0].nodeValue; spanNode.onmouseover = highlight; spanNode.onmouseout = unHighlight; spanNode.onmousedown = selectWord; space.appendChild(spanNode); } } // funkcja wywołująca skrypt php i pobierająca dokument XML function showWords() { var string = $("string").value; if(string) { // przy pustym polu nie następuje wysyłanie żądania advAJAX.get({ url : "suggest.php?prefix="+$("string").value, onInitialization : function() { $("suggestion").style.display = "block"; }, onSuccess : function(obj) { parseRecords(obj.responseXML); }, onError : function(obj) { alert("Nie można nawiązać połączenia z serwerem."); } }); } else { // ukrycie warstwy $("suggestion").style.display = "none"; } } Plik suggest.php (wywoływany przez suggest.js)
Plik add.php odpowiedzialny za dodanie słowa do bazy danych:
Oraz plik kaskadowych arkuszy stylów (css.css): html, body{ padding: 0; margin: 0; font-family : Arial, sans-serif; } Kod #inputBox { border: 3px double #000; background: #CCF; margin: 1em; padding: 0.5em; } #suggestion { background: #FFF; height: 100px; width : 200px; border: 1px solid #000; margin: 0.1em; position: relative; left: 140px; overflow : auto; float : left; display: none; cursor: default; } #suggestion span { display: block; } #string { width : 200px; font-size : 13px; padding-left : 2px; border: 1px solid #000; } #button { width: 100px; color: #FFF; background: #000; border: 1px solid #FFF; } .highlight { background-color: #69F; color: #FFF; } .unhighlight { background-color: #FFF; color: #000; } Gdyby nie omówiona wada, byłbym zadowolony z funkcjonalności (pomimo, że wystarczy sam js, ale czego sie nie robi dla praktyki ![]() Ten post edytował JaRoPHP 15.05.2006, 08:03:24 -------------------- Kto pyta, nie błądzi...
Kto zbłądził, ten pyta... |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 15.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Argument
Kod url : "suggest.php?prefix="+$("string").value jest błędny - każdy parametr żądania powinien być przepuszczony przez funkcję encodeURIComponent i właśnie po to w AdvancedAJAX jest argument parameters: Kod url : 'suggest.php', parameters : { prefix : $('string').value } lub, jako, że parametr o nazwie "prefix" nie jest rozpoznawany przez AdvancedAJAX: Kod url : 'suggest.php',
prefix : $('string').value -------------------- Łukasz Lach
http://anakin.us/ |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 675 Pomógł: 15 Dołączył: 7.11.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Dzięki anAKiN za sugestie, choć nie do końca rozumiem.
Otóż na stronie na której prezentujesz advAJAX jest przykład, Cytat w którym jeden z argumentów został umieszczony bezpośrednio w argumencie url : Kod advAJAX.get({ url: "http://www.example.com/page.html?var1=value1", queryString : "var2=value2", parameters : { "var3" : "value3" }, onSuccess : function(obj) { alert(obj.responseText); }, onError : function(obj) { alert("Error: " + obj.status); } }); Czy więc argument var1=value1 jest źle podany? Oraz kolejne pytanie, jaka jest różnica między podanymi przez Ciebie rozwiązaniami. Które jest lepsze i powinno zawsze działać? -------------------- Kto pyta, nie błądzi...
Kto zbłądził, ten pyta... |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 15.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czy więc argument var1=value1 jest źle podany? Jest dobrze podany, ale zauwaz, ze jest to stala "value1", ktora nie musi byc przepuszczona przez encodeURIComponent, bo to zwyczajnie widac i znamy jej wartosc. Przesylana przez ciebie wartosc do skryptu php jest zalezna od tego, co poda uzytkownik, takze nie masz pewnosci, ze nie znajda sie tam znaki, ktore musza byc przekonwertowane przed wyslaniem. Dwie opisane metody sa zamienne. Druga jest o tyle gorsza, ze wprowadza balagan w kodzie i uniemozliwia stworzenie parametru o nazwie, ktora pozpoznaje AdvancedAJAX, np. "url". Lepsze jest wiec wykorzystanie parametru "parameters". -------------------- Łukasz Lach
http://anakin.us/ |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 675 Pomógł: 15 Dołączył: 7.11.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Dzięki anAKiN!
A teraz moze ktoś wie, jak rozwiązać problem z polskimi znakami... -------------------- Kto pyta, nie błądzi...
Kto zbłądził, ten pyta... |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Polskie znaki, w ogóle jakiekolwiek ciągi znaków jak już sugerował Ci Anakin powinenes przepuszczać przez encodeURIComponent().. ewentualnie gdy przesyłasz dane poprzez POST to zdaje się musisz juz ich tym filtrować (ale tego nie jestem na tę chwilę pewien). Też pracuj w kodowaniu utf-8.. oszczędzi Ci to wielu problemów własnie związanych z kodowaniem znaków.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 675 Pomógł: 15 Dołączył: 7.11.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
No tak, ale z kodowaniem utf-8 też są problemy - nie wszytskie edytory zapisują, lub odczytują poprawnie tak zapisane dokumenty...
-------------------- Kto pyta, nie błądzi...
Kto zbłądził, ten pyta... |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 240 Pomógł: 0 Dołączył: 18.01.2004 Skąd: rzeszów / kraków Ostrzeżenie: (0%) ![]() ![]() |
przez encodeURIComponent() musze przepuścić to co jest zwracane czyli np tak
bo w ten sposób jak robie to nada widze krzaki tylko teraz zamiast ![]() ![]() ![]() Ten post edytował dyktek 19.05.2006, 11:41:39 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 352 Pomógł: 0 Dołączył: 22.01.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cytat No tak, ale z kodowaniem utf-8 też są problemy - nie wszytskie edytory zapisują, lub odczytują poprawnie tak zapisane dokumenty... No to trzeba korzystać z takich edytorów, które radzą sobie z UTF-8 (nawet zwykły notatnik to potrafi). Cytat przez encodeURIComponent() musze przepuścić to co jest zwracane czyli np tak
bo w ten sposób jak robie to nada widze krzaki tylko teraz zamiast ![]() ![]() ![]() encodeURIComponent() jest to funkcja javascript nie php. Przez nią przepuszczasz ciągi znaków, które wysyłasz na serwer (do skryptu php). |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 240 Pomógł: 0 Dołączył: 18.01.2004 Skąd: rzeszów / kraków Ostrzeżenie: (0%) ![]() ![]() |
no tak masz racje przez pomyłke wstawiłem to w bbcode php
no ale dane przenoszone bez tej funkcji są zapisywane w bazie w porządku dopiero gdy wyjmuje dane z bazy i chce wstawić je w pole teksowe to w to pole zamiast znaków PL są te krzaki i zwraca zamiast zanków pl ![]() ![]() ![]() robie tak zwraca %EF%BF%BD%EF%BF%BD%E6%B6%B6%EF%BF%BD Ten post edytował dyktek 19.05.2006, 11:56:27 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 14:57 |