Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript]UI-autocomplete nie działa na serwerze
Forum PHP.pl > Forum > Przedszkole
nansss93
Witam,
Korzystając z ui-autocomplete napisałem sobie wyszukiwarkę z podpowiadaniem, problem w tym, że na localhost działa, ale na serwerze produkcyjnym już nie(zero błędów w konsoli, request do php się wykonuje jednak response jest pusty, natomiast gdy tam print_r przed return w php zwraca poprawną tablicę wyników).

  1. var cache = {};
  2. var search = $("#search");
  3. search.autocomplete({
  4. minLength: 1,
  5. autoFocus: true,
  6. source: function(request,response){
  7. var term = request.term;
  8. if(term in cache){
  9. response(cache[term]);
  10. return;
  11. }
  12. $.getJSON("/pl/search/search",request,function(data){
  13. cache[term] = data;
  14. response(data);
  15. });
  16. },
  17. select: function( event, ui ) {
  18. if(ui.item.value!='Brak rezultatów' && ui.item.value!='Keine Ergebnisse gefunden' && ui.item.value!='No result' && ui.item.value!='Найденные'){
  19. $('#search').val(ui.item.value);
  20. $("input.buttonS").trigger("click");
  21. }
  22. }
  23. });


  1. public function searchAction(){
  2. $this->view->disable();
  3. $lang = parent::getTranslation();
  4. $data = $this->request->get();
  5. $req = $data['term'];
  6. $item = new \Models\Item\Item();
  7. $items = $item->getItemByNameAndLang($req, $_SESSION['lang']);
  8. $ret = array();
  9. foreach($items as $it){
  10. $ret[] = $it->getName($_SESSION['lang']);
  11. }
  12. if(empty($ret)){
  13. $ret[] = $lang->_("nosearch");
  14. }
  15. return json_encode($ret);
  16. }


Co robię nie tak?
kapslokk
Jaka masz wersje php na serwerze produkcyjnym? Wyswietlanie/logowanie bledow na pewno wlaczone?
nospor
Pewnie masz problem z utf8 i json_encode sie normalnie w swiecie wyklada. Albo w ogole nie masz json_encode funkcji biggrin.gif

var_dump(json_encode($ret));
nansss93
  1. var_dump(json_encode($ret));


zwraca

string(52) "["Produkt","Produkt","Produkt","Produkt","Produkt2"]"

Wersja PHP na serwerze:

PHP Version 5.6.26-1~dotdeb+7.1
nospor
No to problem masz poza funkcja searchAction(). Szukaj dalej
nansss93
Przerobiłem trochę kod js:

  1. var cache = {};
  2. var search = $("#search");
  3. search.autocomplete({
  4. minLength: 1,
  5. autoFocus: true,
  6. source: function(request,response){
  7. var term = request.term;
  8. if(term in cache){
  9. response(cache[term]);
  10. return;
  11. }
  12. var test = $.getJSON("/pl/search/search",request,function(data){
  13. cache[term] = data;
  14. console.log('1');
  15. response(data);
  16. })
  17. .done(function() {
  18. console.log( "second success" );
  19. })
  20. .fail(function() {
  21. console.log( "error" );
  22. })
  23. .always(function() {
  24. console.log( "complete" );
  25. });
  26. test.complete(function() {
  27. console.log( "second complete" );
  28. });
  29. },
  30. select: function( event, ui ) {
  31. if(ui.item.value!='Brak rezultatów' && ui.item.value!='Keine Ergebnisse gefunden' && ui.item.value!='No result' && ui.item.value!='questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?'){
  32. $('#search').val(ui.item.value);
  33. $("input.buttonS").trigger("click");
  34. }
  35. }


i na serwerze mam w console:

Kod
error
complete
second complete


a na localu:

Kod
1
second success
complete
second complete


poza tym pusto w konsoli

Udało mi się jeszcze uzyskać treść błędu:

Kod
Request Failed: parsererror, SyntaxError: Unexpected end of JSON input


Ok, mam. Zmieniłem:

  1. return json_encode($ret);


na

  1. $result = json_encode($ret);
  2. echo $result;
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.