Каким образом передать новый запрос?

346
26 января 2017, 04:19

Здравствуйте. Такая задача. Есть два поля для ввода (input). Оба они на одной странице. И в этих полях, при вводе текста, появляются подсказки с возможными вариантами(из базы данных).

Мне же нужно сделать, чтобы во втором поле, подсказки зависели от того что введено в первое поле. Например, в базе есть подсказки для первого поля: Машина, Дерево. А для второго поля, в базе занесены подсказки для обоих вариантов, для Машина: грузовик, легковой. Для Дерево: Сосна, Береза.

И вот если в первое поле поле пользователь написал Машина, то во втором поле должны быть подсказки только для машины.

Как делать выбору из базы я знаю. Я не знаю как без перезагрузки страницы сформулировать sql запрос, и тут же вывести его.

Я пытался сделать так:

$('#street').blur(function(e) {
var name_st = this.value;
$.ajax( {
  type: 'POST',
  url: '/inc/adres.php',
  data: {info:name_st},
  'success' : function (result) {
  }
});
});

Этим кодом я определил что введено в первое поле, и после выхода из этого поля, посылаю POST на php файл (adres.php), в котором должна идти выборка из базы, по введенному слову.

Файл adres.php я вывожу инклудом, в самом начале страницы.

Код файла:

if (isset($_POST['info'])){
$sql_streetj = mysql_fetch_assoc(mysql_query("SELECT * FROM `street` WHERE `name_ru` = '".$_POST['info']."' "));
  $sl2 = array();
  $all_city_db2 = mysql_query("SELECT * FROM `houses` WHERE `id_street` = '$sql_streetj[id]'");
  while ($city_name_ru2 = mysql_fetch_assoc($all_city_db2)) {
    $sl2[] = $city_name_ru2['name_ru'];
  }
}else{
    $sl2 = array();
    $all_city_db2 = mysql_query("SELECT * FROM `houses`");
    while ($city_name_ru2 = mysql_fetch_assoc($all_city_db2)) {
      $sl2[] = $city_name_ru2['name_ru'];
    }
}

Логика этого файла: Если есть POST то должен сформулироваться массив с подсказками, для второго поля. Если POST нету, тогда формируется массив, и в нем все возможные подсказки, для всех вариантов, без выборки.

В итоге получается что при загрузке страницы формируется массив со всеми возможными подсказками(так как POST еще нет), а после того как заполняю первое поле, ничего не происходит, массив с подсказками остается прежний, как будто бы и не посылался POST.

Может быть я что-то упускаю? Может быть на странице php код не обновляется?

Буду очень благодарен за помощь. P.S. знания js у меня не очень.

Answer 1

Для того что бы отдать что то в result в js вам надо сформировать ответ и вывести в формате json, html либо другим каким либо спобом. Далее фаил не стоит инклудить а сделайте его отдельной страницей. И модифицируйте:

к примеру фаил /inc/adres_json.php

header('Content-type: application/json');
if (isset($_POST['info'])){
$sql_streetj = mysql_fetch_assoc(mysql_query("SELECT * FROM `street` WHERE `name_ru` = '".$_POST['info']."' "));
  $sl2 = array();
  $all_city_db2 = mysql_query("SELECT * FROM `houses` WHERE `id_street` = '$sql_streetj[id]'");
  while ($city_name_ru2 = mysql_fetch_assoc($all_city_db2)) {
    $sl2[] = $city_name_ru2['name_ru'];
  }
}else{
    $sl2 = array();
}
echo json_encode($sl2);

так вы в переменой result получите требуемый массив и уже на js сможите распарсить

$('#street').blur(function(e) {
var name_st = this.value;
$.ajax( {
  type: 'POST',
  url: '/inc/adres_json.php',
  data: {info:name_st},
  'success' : function (result) {
      console.log(result); // тут будет массив пришедший от php
  }
});
});

p.s. mysql - устарел используйте mysqli или pdo

p.p.s. Так же можно сгенерировать json со всеми подсказками и уже играться с этим масивом в js не запрашивая сервер лишний раз. т.е. Вы в вопросе придумали два подхода, один запрос на сервер ajax, другой обрабтока подсказок на js.

Answer 2

Вы можете посмотреть в сторону UI autocomplete + ajax

т.е после ввода текста в первом input - вы отправляете AJAX запрос с значением "Машина" и получаете данные из базы которые связанны с значением, после получения данных вы уже вводите в autocomplete (как? читать документацию)... и всё, после когда пользователь начнёт писать во втором input-е уже будут показыватся подсказки для конкретного значения.
P.S объязательно почитать как работать с UI autocomplete (например тут)

READ ALSO
Запись cookie посетителя при нажатии клавиши

Запись cookie посетителя при нажатии клавиши

Прошу помощи в доработки скрипта

412
Есть ли тарифы на запросы в google map Javacript api

Есть ли тарифы на запросы в google map Javacript api

У меня есть приложениеВ нем отображается 70 маркеров

402
jquery datatables & html2 canvas серый текст

jquery datatables & html2 canvas серый текст

ЗдравствуйтеПодскажите такая ситуация

337