Как отправить ajax-запрос по одному на той же странице в конкретном блоке кода - PullRequest
0 голосов
/ 29 января 2019

Привет всем. Я немного запутался, посылая запрос с помощью ajax.Я могу отправить запрос, используя первое текстовое поле (используя событие onkeyup), а также правильно получая ответ, как мне нужно.

Но теперь я хочу также отправить запрос из второго текстового поля (используя событие onkeyup) натот же URL и на этот раз вызов ajax должен выполнить еще один блок кода.Но я не могу этого сделать.Пожалуйста, помогите мне получить правильный результат.

HTML

<div class="form-group">
    <label for="qualityname">Quality Name: </label>
    <input type="text" class="form-control" id="qualityname" placeholder="Enter quality name" name="qualityname" list="addlist">
    <datalist id="addlist" class="response"></datalist>
</div>

<div class="form-group">
    <label for="qualitycolor">Product Color(number on shadecard):</label>
    <input type="text" class="form-control" id="qualitycolor" placeholder="Enter product color" name="qualitycolor" list="addlist1">
    <datalist id="addlist1" class="response1"></datalist>
</div>

jQuery

/*Code for first text-field ajax request*/
    $('document').ready(function(){
        $('#qualityname').keyup(function(){
          if(!($('#qualityname').val() == '')){
            $.ajax({
              type: 'POST',
              url: 'scripts.php',
              data: $(this).serialize()
            })
            .done(function(data){
              $('.response').html(data);
            })
            .fail(function(){
              alert('data not post');
            });
            return false;
          }
          else{
            $('#response').html('<span></span>');
          }
        });

/*Code for second text-field ajax request*/
        $('#qualitycolor').keyup(function(){
          if(!($('#qualitycolor').val() == '')){
            $.ajax({
              type: 'POST',
              url: 'scripts.php',
              data: $(this).serialize()
            })
            .done(function(data){
              $('.response1').html(data);
            })
            .fail(function(){
              alert('data not post');
            });
            return false;
          }
          else{
            $('#response1').html('<span></span>');
          }
        });
      });

script.php

 include "connection.php";

/*code for response first text-field request*/
if ($_SERVER["REQUEST_METHOD"] == "POST"){
    $qualityname = $_POST['qualityname'];
    $sql = "select DISTINCT quality_name from products where quality_name like '".$qualityname."%' limit 10";
    if(!$result = mysqli_query($con, $sql)){
        echo mysqli_error($con);
    }

    while($row = mysqli_fetch_array($result)){
        echo "<option>".$row['quality_name']."</option>";
    }

    /*code for response second text-field request*/     
}

1 Ответ

0 голосов
/ 29 января 2019

Вы знаете, что каждое поле будет доступно в массиве POST отдельно, в зависимости от того, какое текстовое поле редактируется, поэтому вы можете разветвлять логику в PHP на основе существования в массиве POST определенного поля.В этом случае isset кажется подходящим - или empty ~, чтобы вы могли протестировать if( isset( $_POST['qualityname'] ) ) и т. Д.

Поскольку код был потенциально уязвим для внедрения SQL, я переписал запросы для использования prepared statements, чтобы дать представлениекак вы должны обрабатывать пользовательский ввод - он не был отлажен, поэтому там может быть странная ошибка.

if( $_SERVER["REQUEST_METHOD"] == 'POST' ){

    include "connection.php";

    # test if the field is in post array... 
    if( isset( $_POST['qualityname'] ) ){
        $sql='select distinct quality_name from products where quality_name like ? limit 10';
        $stmt=$con->prepare( $sql );

        if( $stmt ){
            $qualityname = '%'.$_POST['qualityname'].'%';
            $stmt->bind_param('s',$qualityname );
            $res=$stmt->execute();

            if( $res ){
                $stmt->store_result();
                $stmt->bind_result( $name );

                while( $stmt->fetch() ) printf( '<option value="%s">%s', $name, $name );
                $stmt->free_result();
                $stmt->close();
            }
        }
    }


    if( isset( $_POST['qualitycolor'] ) ){

        /* assumed same table and similar variables... edit as appropriate */
        $sql='select distinct colour_name from products where colour_name like ? limit 10';
        $stmt=$con->prepare( $sql );

        if( $stmt ){
            $qualitycolor='%'.$_POST['qualitycolor'].'%';
            $stmt->bind_param('s',$qualitycolor );
            $res=$stmt->execute();

            if( $res ){
                $stmt->store_result();
                $stmt->bind_result( $colour);

                while( $stmt->fetch() ) printf( '<option value="%s">%s', $colour, $colour);
                $stmt->free_result();
                $stmt->close();
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...