Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: AJAX Suggest - problem z wyszukiwaniem
Forum PHP.pl > Forum > XML, AJAX > AJAX
artvip
Witam,

chciałem zrobić na stronie za pomocą AJAXa w polu wyszukiwania opcję auto suggest. Na temat kodowania polskich znaków wiele było.. i wiele już przeczytałem.. niestety bliski jestem poddania się sad.gif

Skrypt który tutaj prezentuję nie jest moim dziełem. Dostosowałem go tylko do połączenia z moją bazą MSSQL.

Wydaje mi się, że problem jest po stronie AJAXa. Bardzo proszę o pomoc.

Nagłówek oczywiście rozwiązuje moje problemy z polskimi znakami:
  1. <?php
  2. header('Content-type: text/html; charset=windows-1250');
  3. ?>

o dziwo windows-1250 a nie UTF-8 (na którym mam krzaki).

W opcji wyszukiwania mam taki dziwny problem. Przykład:

Słowo szukane: MAŚĆ. Autosugestia po wpisaniu MA... pokazuje MAŚĆ ale po wpisaniu całego słowo podpowiedz znika.

Kolejny przykład słowo: ŚCIANA -> autosugestia nie znajduje takiego słowa mimo, że w bazie jest.

Podsumowując:
Skrypt wyświetla wszystkie polskie znaki ł,ź,ć itd ale już nie wyszukuje po tych znakach..

Skrypt który wykorzystuję:
index.php
  1. <?php
  2. header('Content-type: text/html; charset=windows-1250');
  3. ?>
  4. <body onLoad="DoCostam();">
  5. <script type="text/javascript" src="ajax.js"></script>
  6. <script type="text/javascript">
  7. </script>
  8. <link href="styles.css" rel="stylesheet" type="text/css">
  9. <link rel="stylesheet" type="text/css" href="i_hate_IE.css" /></link>
  10.  
  11. </head>
  12. <body>
  13. <center>
  14. <div class="ajax-div">
  15. <div class="input-div">
  16. User:
  17. <input type="text" onKeyUp="getScriptPage('box','text_content')" id="text_content" size="40">
  18. </div>
  19. <div id="box"></div>
  20. </div>
  21. </center>
  22. </body>
  23. </html>


script_page.php

  1. <?php
  2. header('Content-type: text/html; charset=windows-1250');
  3. ?>
  4. <html>
  5. <head>
  6. <meta http-equiv="content-type" content="text/html; windows-1250" />
  7. <script type="text/javascript" src="ajax.js"></script>
  8. </head>
  9. </html>
  10. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html>
  11. <head>
  12. <meta http-equiv="Content-type" content="text/html; charset=windows-1250">
  13. <?php
  14. include('conn.php');
  15. $str = strtolower($_GET['content']);
  16. if(strlen($str))
  17. {
  18. $sel = mssql_query("SELECT DISTINCT NAZWISKO_IMIE FROM PRACOWNIK WHERE NAZWISKO_IMIE LIKE '".trim($str)."%'");
  19.  
  20. if(mssql_num_rows($sel))
  21. {
  22. echo "<table border =\"0\" width=\"100%\">\n";
  23. if(mssql_num_rows($sel))
  24. {
  25. echo "<script language=\"javascript\">box('1');</script>";
  26. while($row = mssql_fetch_array($sel))
  27. {
  28. $NAZWISKO_IMIE = str_ireplace($str,"<b>".$str."</b>",($row['NAZWISKO_IMIE']));
  29. echo "<tr id=\"word".$row['id']."\" onmouseover=\"highlight(1,'".$row['id']."');\" onmouseout=\"highlight(0,'".$row['id']."');\" onClick=\"display('".$row['NAZWISKO_IMIE']."');\" >\n<td>".$NAZWISKO_IMIE."</td>\n</tr>\n";
  30. }
  31. }
  32. echo "</table>";
  33. }
  34. }
  35. else
  36. {
  37. echo "<script language=\"javascript\">box('0');</script>";
  38. }
  39. ?>
  40. </head>


do tego oczywiście połączenie z bazą conn.php i ajax.js

  1. subject_id = '';
  2. function handleHttpResponse() {
  3. if (http.readyState == 4) {
  4. if (subject_id != '') {
  5. document.getElementById(subject_id).innerHTML = http.responseText;
  6. }
  7. }
  8. }
  9. function getHTTPObject() {
  10. var xmlhttp;
  11. @cc_on
  12. @if (@_jscript_version >= 5)
  13. try {
  14. xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  15. } catch (e) {
  16. try {
  17. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  18. } catch (E) {
  19. xmlhttp = false;
  20. }
  21. }
  22. @else
  23. xmlhttp = false;
  24. @end @*/
  25. if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
  26. try {
  27. xmlhttp = new XMLHttpRequest();
  28. } catch (e) {
  29. xmlhttp = false;
  30. }
  31. }
  32. return xmlhttp;
  33. }
  34. var http = getHTTPObject(); // We create the HTTP Object
  35.  
  36. function getScriptPage(div_id,content_id)
  37. {
  38. subject_id = div_id;
  39. content = document.getElementById(content_id).value;
  40. http.open("POST", "script_page.php?content=" + escape(content), true);
  41. http.onreadystatechange = handleHttpResponse;
  42. http.send(null);
  43. if(content.length>0)
  44. box('1');
  45. else
  46. box('0');
  47.  
  48. }
  49.  
  50. function highlight(action,id)
  51. {
  52. if(action)
  53. document.getElementById('word'+id).bgColor = "#C2B8F5";
  54. else
  55. document.getElementById('word'+id).bgColor = "#F8F8F8";
  56. }
  57. function display(word)
  58. {
  59. document.getElementById('text_content').value = word;
  60. document.getElementById('box').style.display = 'none';
  61. document.getElementById('text_content').focus();
  62. }
  63. function box(act)
  64. {
  65. if(act=='0')
  66. {
  67. document.getElementById('box').style.display = 'none';
  68.  
  69. }
  70. else
  71. document.getElementById('box').style.display = 'block';
  72. }
  73.  
  74.  
  75.  


Będę wdzięczny za wszelkie uwagi.
piotrooo89
to co dostajesz od AJAX'a prze konwertuj za pomocą: iconv.
artvip
Nie za bardzo pomaga sad.gif

Robię:
  1. echo iconv('Windows-1250', 'UTF-8//TRANSLIT', $q);


i teraz gdy wyszukuję wpisując literę Ś mam wynik => ĺ›

Zapewne taka też zmienna podstawiana jest do $query i SELECT nic nie zwraca sad.gif

Próbowałem już wiele kombinacji kodowania znaków w iconv i nic...

Jakieś sugestie?
piotrooo89
a co to za dziwne TRANSLIT?
artvip
Z manuala..

  1. <?php
  2. $string = "ʿABBĀSĀBĀD";
  3.  
  4. echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $string);
  5. // output: [nothing, and you get a notice]
  6.  
  7. echo iconv('UTF-8', 'ISO-8859-1//IGNORE', $string);
  8. // output: ABBSBD
  9.  
  10. echo iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $string);
  11. // output: ABBASABAD
  12. // Yay! That's what I wanted!
  13.  
  14. ?>


ale to tylko przykład.. robię też np:
  1. echo iconv("windows-1250","UTF-8", $q);


i wynik taki:
ą => ä…
ś => ĺ›
ć => ä‡
ł => ĺ‚

sad.gif
piotrooo89
bo kolejność powinna być taka:

kodujesz stringa z Windows-1250 na UTF a później to co dostaniesz od AJAX'a w UTF kodujesz na Windows-1250. no chyba że jeszcze w czymś innym jest problem. i jakbyś mógł zamieścić to gdzieś na jakimś serwerze żeby sobie pooglądać.
artvip
Nie za bardzo mam jak.. serwer jak i bazę danych mam po stronie sieci korpo..

Wywaliłem teraz całkiem kodowanie.. wyrzucam w autosuggest czyste dane.. teraz wszystkie polskie znaki mam widoczne jako "?"

Dziwne jest to, że jak tylko wrzucę nagłówek:
  1. <?php
  2. header('Content-type: text/html; charset=windows-1250');
  3. ?>


to wszystkie znaki polskie mam prawidłowo wyświetlane.. ale szukam np słowa:
maść -> i jest ok, prawidłowo sugeruje, prawidłowo rozpoznaje ść, wpisując maść widzi pl znaki
natomiast słowo:
ściana -> nie znajduje, nie daje żadnej sugestii do słów rozpoczynających się od polskich znaków śćźłż itd..




michael8383
a mi wyskakuja bledy w tym skrypcie. nie wiem, moze cos z kodowaniem jest nie tak jak wklejam ajax.js

Kod
missing; before statement
@end @*;\n


w linii 24

ciekawy jestem jak to dziala i chcialem uruchomic. cos zle robie? przerobilem baze na swoja mysql ale to raczej blad nie po stronie bazy tylko cos zle ze skryptem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.