Обновление Ajax в цикле While — jQuery

#javascript #php #jquery #ajax

#javascript #php #jquery #ajax

Вопрос:

Я пытаюсь выполнить обновление Ajax в цикле While, который извлекает информацию из базы данных. Обновление запускается событием onclick кнопки рядом с формой ввода, которая существует в каждой строке.

Полагаю, мне нужно передать 2 переменные — идентификатор строки и новый текст из входных данных. Затем при успешном выполнении: мне нужно обновить входные данные новым значением и также обновить столбец B (статический html).

 HTML

  <table id='movies'>
  <thead>
  <tr>
  <th>COLUMN A</th>
  <th>COLUMN B</th>
  <th>MOVIE ID</th>
  </tr>
  </thead>
  <tbody>

  while ($row = oci_fetch_array($ajaxmovies, OCI_ASSOC OCI_RETURN_NULLS)) {

  <td> . $row['MOVIENAME'] . </td>
  <td> . $row['MOVIEID'] . </td>
  <td> 

   echo "<input type='text' id='mov' name='movie' maxlength='8' pattern='[0-9]{8}' value='" . $row['MOVIEID'] . "'>";

   echo "<button class='button_save' data-id='" . $row['MOVIEID'] . "'>Save</button>";

  </td>
  </tr>

  }

  </tbody>
  </table>
  

И вот скрипт Ajax — который терпит неудачу — надеюсь, ищет решение с объяснением. Спасибо.

   <script>

  $('.button_save').click(function() { // onclick handler to each of the buttons

  var val1 = $('#mov').val(); // value from input of each row
  var val2 = $(this).attr("data-id");  // Get the ID of the button that was clicked on

   $.ajax({ // AJAX request
       type: 'POST',
       url: 'mov_update.php',
       data: { text1: val1, text2: val2 },

       success: function(response) {
          // $('#result').html(response);
          $('#mov').val(val1); // updates input new value
    }
  });
});

  </script>
  

и вот обновление базы данных mov_update.php

   // DB Connection

  $text1 = $_POST['text1'];
  $id = $_POST['text2'];

  $sql = "UPDATE SCHEMA.MOVIEW SET MOVIE=:mov
                               WHERE ID=:id";

  $objParse = oci_parse($conn, $sql); 

  oci_bind_by_name($objParse, ':id', $id);
  oci_bind_by_name($objParse, ':mov', $text1);

  $objExecute = oci_execute($objParse, OCI_DEFAULT);

  if ($objExecute) {

      oci_commit($conn); 

      echo $text1 . $id;
  }
  

Комментарии:

1. идентификаторы должны быть уникальными, вы используете один и тот же идентификатор для вашего входного текста в инструкции foreach, что означает, что у вас есть несколько полей ввода, содержащих один и тот же идентификатор

Ответ №1:

Элемент с id должен быть уникальным на странице. Итак, создание десятков <input type='text' id='mov' /> является некорректным. Вместо этого следует использовать «динамические» идентификаторы, например:

 echo "<input type='text' id='mov-" . $row['MOVIEID'] . "' name='movie' maxlength='8' pattern='[0-9]{8}' value='" . $row['MOVIEID'] . "'>";
echo "<button class='button_save' data-id='" . $row['MOVIEID'] . "'>Save</button>";
  

Я полагаю, ваши $row['MOVIEID'] хранилища уникальных значений. И из-за этого,
id='mov-" . $row['MOVIEID'] . "' это строки типа mov-2 , mov-3 , mov-10 и т.д.

Теперь в вашем js вы можете:

 var val2 = $(this).attr("data-id");  // Get the ID of the button that was clicked on
var val1 = $('#mov-'   val2).val();  // value from `input` which is connected the clicked button

$.ajax({ // AJAX request
  type: 'POST',
  url: 'mov_update.php',
  data: { text1: val1, text2: val2 },
  success: function(response) {
      // $('#result').html(response);
      //$('#mov').val(val1); // updates input new value
      // not sure what this is for, as field value is already `val1`
      $('#mov-'   val2).val(val1);
   }
});
  

Комментарии:

1. Лично я бы использовал data- атрибуты pair, а не семантические идентификаторы, но принцип тот же.

2. Сейчас у меня это работает — за исключением того, как мне обновить СТОЛБЕЦ B с новым обновленным идентификатором фильма после обновления базы данных? Он по-прежнему отображает старое значение, когда я хочу отобразить новое обновленное значение из базы данных? Предполагая, что это происходит в функции успеха.

3. Что такое столбец B?

4. Столбец B просто отображает статический идентификатор фильма из базы данных — но он показывает старое значение после его обновления — мне нужен ajax для обновления этой ячейки

5. Повторите некоторые данные в php-скрипте, и они будут в переменной ответа в success().