Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Автоподстановка из php
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » Автоподстановка из php

Страниц (2): [1] 2 »
 

1. Russer - 24 Июля, 2015 - 13:37:39 - перейти к сообщению
Хочу сделать автоподстановку в форму , чтобы по первым буквам давался список возможных слов. Начал с простого, почитал в интернете , если задавать значения через массив {Var массив=["переменная1" , "переменная2" , "переменная3"];} то все работает , далее решил усложнить и попробовать вытаскивать данные с php скрипта , чтобы в дальнейшем брать данные из mysql , но вот тут возникла проблема , а именно в каком формате я должен отдавать данные в autocomplite ? Делаю как описано в примере , но результатов нет

Клиентская часть:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5.   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  6.   <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
  7.   <script src="jquery-ui.min.js"></script>
  8.    <script>
  9.  $("#tags").autocomplete({source: "search.php", minLength:1});
  10.   </script>
  11.   <link type="text/css" href="jquery-ui.min.css" rel="stylesheet" />
  12.   <style>
  13.     body{font:normal 9pt Arial,sans-serif;}
  14.   </style>
  15. </head>
  16. <body>
  17.   <label for="tags">Автоподстановка </label>  <input id="tags" />
  18.  
  19.  
  20. </body>
  21. </html>
  22.  


Серверная часть:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $array = array('Переменная1', 'Переменная2', 'Переменная3');
  4.  
  5. $string =implode(",",$array);
  6. $result ="[".$string."]";
  7. echo ($result);
  8. ?>
  9.  


Подскажите , что я делаю не правильно ? Может формат полученных данных должен быть обязательно json, а потом необходимо разобрать его в новый массив ?
2. Ch_chov - 24 Июля, 2015 - 15:17:13 - перейти к сообщению
Цитата:
Может формат полученных данных должен быть обязательно json, а потом необходимо разобрать его в новый массив ?

Да, PHP скрипт должен отдавать данные в формате JSON. Создавать новый массив скорей всего не нужно.
3. DelphinPRO - 24 Июля, 2015 - 16:31:00 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $array = array('Переменная1', 'Переменная2', 'Переменная3');
  2. echo json_encode($array);
4. Сочная Долька - 25 Июля, 2015 - 13:56:21 - перейти к сообщению
JQuery UI Autocomplete понимает только JSON. Вообще, всякий XHR от такого типа виджетов понимает JSON. Предыдущий оратор показал вам стандартное средство форматирования массивов в PHP в JSON.
5. Russer - 27 Июля, 2015 - 11:28:50 - перейти к сообщению
Спасибо за советы! Но так тоже не работает , при переходе к json на русских буквах :
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $array = array('Переменная1', 'Переменная2', 'Переменная3');
  4. ?>
  5.  

Получается следующие :
CODE (html):
скопировать код в буфер обмена
  1.  
  2. string(193) "["\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f1","\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f2","\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f3"]"
  3.  

Нашел функцию json_encode($array, JSON_UNESCAPED_UNICODE), но она не работает выдает ошибку.
Попробовал с английским символами
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $array = array('Perem1', 'Perem2', 'Perem3');
  4. ?>
  5.  

Результат судя по описаниям верный:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. string(28) "["Perem1","Perem2","Perem3"]"
  3.  

Но автоподстановка все равно не работает , может есть еще варианты в чем может быть проблема ?
6. DelphinPRO - 27 Июля, 2015 - 12:49:08 - перейти к сообщению
Russer пишет:
Но так тоже не работает , при переходе к json на русских буквах :
Русские буквы не при чем.

Вы документацию по плагину jQuery.Autocomplete читали? Недостаточно просто список отдавать с сервера
Ознакомьтесь: https://github[dot]com/devbridge/jQu[dot][dot][dot]#response-format
7. Russer - 27 Июля, 2015 - 13:07:27 - перейти к сообщению
DelphinPRO пишет:
Russer пишет:
Но так тоже не работает , при переходе к json на русских буквах :
Русские буквы не при чем.

Вы документацию по плагину jQuery.Autocomplete читали? Недостаточно просто список отдавать с сервера
Ознакомьтесь: https://github.com/devbridge/jQuery-Autocomplete#response-format

Спасибо! А нет случаем ссылки на русский аналог ?
Я читал вот здесь http://jquery[dot]page2page[dot]ru/index[dot][dot][dot]0%BD%D0%B8%D0%B5 , но тут слишком мало описания одни примеры по сути.
8. zypikov - 27 Июля, 2015 - 13:55:34 - перейти к сообщению
Russer, у вас в пых скрипте стоит echo или var_dump?

DelphinPRO пишет:
Ознакомьтесь: https://github[dot]com/devbridge/jQu[dot][dot][dot]#response-format


Вроде де бы в Response Format ниче особо нет.
Response from the server must be JSON formatted following JavaScript object
Разве (json_encode($array) не превратит его в нужный json-объект?
9. Viper - 27 Июля, 2015 - 14:18:59 - перейти к сообщению
Russer
Почувствуйте разницу.
PHP:
скопировать код в буфер обмена
  1. $array = array(
  2.         array('value' => 1, 'data' => 'One'),
  3.         array('value' => 2, 'data' => 'Two'),
  4.         array('value' => 3, 'data' => 'Three')
  5. );
  6.  
  7.  
  8. echo json_encode($array);


zypikov пишет:
Вроде де бы в Response Format ниче особо нет.
дело не в формате, а в структуре.
10. Russer - 27 Июля, 2015 - 14:47:13 - перейти к сообщению
zypikov пишет:
Russer, у вас в пых скрипте стоит echo или var_dump?

DelphinPRO пишет:
Ознакомьтесь: https://github[dot]com/devbridge/jQu[dot][dot][dot]#response-format


Вроде де бы в Response Format ниче особо нет.
Response from the server must be JSON formatted following JavaScript object
Разве (json_encode($array) не превратит его в нужный json-объект?

Нет ,echo стоит! Это я просто формат проверял.


Viper пишет:
Russer
Почувствуйте разницу.
PHP:
скопировать код в буфер обмена
  1. $array = array(
  2.         array('value' => 1, 'data' => 'One'),
  3.         array('value' => 2, 'data' => 'Two'),
  4.         array('value' => 3, 'data' => 'Three')
  5. );
  6.  
  7.  
  8. echo json_encode($array);


zypikov пишет:
Вроде де бы в Response Format ниче особо нет.
дело не в формате, а в структуре.

К сожалению так тоже не работает! Тем более , что пример с
PHP:
скопировать код в буфер обмена
  1.  
  2. var availableTags = [
  3.   "Переменная1",
  4.   "Переменная2",
  5.   "Переменная3"
  6. ];
  7. $( "#tags" ).autocomplete({source: availableTags});
  8.  

Работает прекрасно, значит и массив не обязательно индексированный должен быть!
11. Viper - 27 Июля, 2015 - 15:30:14 - перейти к сообщению
Russer пишет:
К сожалению так тоже не работает!
формат
PHP:
скопировать код в буфер обмена
  1. $array = array(
  2.         array('id' => 1, 'label' => 'One', 'value' => 'One'),
  3. );
для удаленных данных.

Russer пишет:
Работает прекрасно, значит и массив не обязательно индексированный должен быть!
в самом простом варианте - да.
12. Russer - 27 Июля, 2015 - 15:41:23 - перейти к сообщению
Viper пишет:
Russer пишет:
К сожалению так тоже не работает!
формат
PHP:
скопировать код в буфер обмена
  1. $array = array(
  2.         array('id' => 1, 'label' => 'One', 'value' => 'One'),
  3. );
для удаленных данных.

Russer пишет:
Работает прекрасно, значит и массив не обязательно индексированный должен быть!
в самом простом варианте - да.

Этот вариант тоже не сработал. Где бы почитать , как правильно это все оформить , в каждой статье по разному реализованно... Огорчение
13. Viper - 27 Июля, 2015 - 15:56:06 - перейти к сообщению
Russer пишет:
Этот вариант тоже не сработал. Где бы почитать , как правильно это все оформить , в каждой статье по разному реализованно...
http://jqueryui[dot]com/autocomplete/#remote
http://api[dot]jqueryui[dot]com/autocomp[dot][dot][dot]e/#option-source
14. Russer - 27 Июля, 2015 - 19:55:07 - перейти к сообщению
Viper пишет:
Russer пишет:
Этот вариант тоже не сработал. Где бы почитать , как правильно это все оформить , в каждой статье по разному реализованно...
http://jqueryui[dot]com/autocomplete/#remote
http://api.jqueryui.com/autocomplete/#option-source

Спасибо , посмотрел , но там нет самого интересного , а именно search.php , нужно посмотреть какой результат он отдает.
Нашел следующие:
Multiple types supported:
Array: An array can be used for local data. There are two supported formats:
An array of strings: [ "Choice1", "Choice2" ]

То есть по идее к нужному виду строку привел , в остальном ошибаться вроде бы негде , не понимаю почему не работает... Огорчение
15. DelphinPRO - 27 Июля, 2015 - 21:07:02 - перейти к сообщению
Вы что, всё еще не решили проблему? Улыбка

Я же дал исчерпывающую ссылку...

На клиенте

CODE (javascript):
скопировать код в буфер обмена
  1. $('#autocomplete').autocomplete({
  2.     serviceUrl: '/search.php'
  3. });


в search .php

PHP:
скопировать код в буфер обмена
  1. $query = $_GET['query'];
  2.  
  3. //.. запрос к базе, или откуда вы там будете данные брать по совпадению с $query
  4.  
  5. // далее из полученных данных формируйте такую структуру
  6. $data = [
  7.     "suggestions" => [
  8.         [
  9.             "value"=> "United Arab Emirates",
  10.             "data": "AE"
  11.         ],
  12.         [
  13.             "value"=> "United Kingdom",
  14.             "data": "UK"
  15.         ],
  16.         [
  17.             "value"=> "United States",
  18.             "data"=> "US"
  19.         ]
  20.     ]
  21. ];
  22. // и выплевывайте ее в браузер
  23. echo json_encode($data);

 

Powered by ExBB FM 1.0 RC1