Изменить текст кнопки в JS/jQuery после завершения процесса в php

Я работаю над кодом jQuery/AJAX, как показано ниже, который вызывает скрипт convert.php.

   jQuery(document).ready(function($)
   {
    $('.go-btn').click(function()
    {   
        let target = $(this).attr('data-id'),
            spanEl = $('.file-name[data-id='+ target +']');

        $.ajax({
            url: 'convert.php',
            type: 'POST',
            data: {id: target}, //change to what you want
            success: function(res)
            {
                console.info("Tested");
            },
            error: function(res)
            {

            }
        })
    })  
   });  

В скрипте конвертировать.php происходит конвертация mp4 в mp3. После завершения преобразования на консоли выводится Протестировано.

Постановка задачи:

Мне интересно, какие изменения я должен внести в код jQuery/AJAX выше, чтобы после завершения преобразования текст кнопки, принадлежащий приведенному ниже HTML-коду, изменился на Завершенный

Приведенный выше код jQuery/AJAX вызывается при нажатии кнопки. Вот фрагменты HTML-кода кнопки:

HTML-код:

  <?php  foreach ($programs as $key => $program) {  ?> 
       <tr data-index = "<?php echo $key; ?>">
          <td><input type = "submit" name = "go-button" value = "Go" data-id = "<?php echo $key; ?>" ></input></td>
       </tr>
  <?php }?>

Почему бы просто не обновить текст кнопки с помощью jQuery с помощью success: $('.go-btn').val('Completed');

MER 13.06.2019 20:54

Где вы хотите, чтобы я обновил это?

john 13.06.2019 20:55

Внутри success - там же, где вы пишете «проверено» в консоли.

MER 13.06.2019 20:57

так ? success: function(res) { $('.go-btn').val('Completed'); },

john 13.06.2019 20:58

Это сработало, спасибо за помощь @MER У меня есть один небольшой вопрос. Приведенный выше HTML-код имеет много строк, и в каждой отдельной строке есть кнопка «Перейти». После завершения процесса для отдельной строки текст Go изменяется на «Завершено» во всех строках, чего я не хочу. Текст Go должен измениться на завершенный только в той строке, к которой он принадлежит.

john 13.06.2019 21:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это просто вопрос захвата кнопки, которая была нажата:

jQuery(document).ready(function($) {
  $('.go-btn').click(function() {
    let target = $(this).attr('data-id'),
      spanEl = $('.file-name[data-id=' + target + ']');
    // Capture the element that received the event
    let btn = this;
    $(btn).val("Converting").prop('disabled', true).css({
      'text-align': 'center',
      'border-color': '#000',
      'width': '120px'
    });
    $.ajax({
      url: 'https://api.myjson.com/bins/80dex',
      method: 'GET', // Change this back to POST
      data: {
        id: target
      }, //change to what you want
      success: function(res) {
        $(btn).val("Completed")
      },
      error: function(res) {
        $(btn).prop('disabled', false).val("Go").removeAttr('style');
      }
    })
  })
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<tr data-index = "1">
  <td>
    <input type = "submit" name = "go-button" class = "go-btn" value = "Go" data-id = "1"></input>
  </td>
</tr>
<tr data-index = "2">
  <td>
    <input type = "submit" name = "go-button" class = "go-btn" value = "Go" data-id = "2"></input>
  </td>
</tr>
<tr data-index = "3">
  <td>
    <input type = "submit" name = "go-button" class = "go-btn" value = "Go" data-id = "3"></input>
  </td>
</tr>

Зачем ты добавил let btn = this; ?

john 13.06.2019 21:24

@john Потому что была нажата конкретная кнопка. Если вы попытаетесь использовать this внутри обратного вызова, this укажет на запрос. Javascript такой странный. Вы можете узнать больше в этой статье или эта книга

msg 13.06.2019 21:25

Имеет смысл, и мы можем использовать как GET, так и POST

john 13.06.2019 21:27

У меня есть последний вопрос. Можем ли мы каким-либо образом изменить текст с Идти на Преобразование после завершения преобразования? Я добавил в свою кодовую базу следующий скрипт, который меняет текст с Идти на Преобразование, но ничего не знает о том, что происходит в фоновом режиме. Он только меняет текст с Идти на Преобразование$("input[name='go-button']").click( function() { // Change the text of the button, and disable $(this).val("Converting").attr("disabled", "true").css({'text-align': 'center', 'border-color': '#000', 'width': '120px'}); });

john 13.06.2019 22:15

@john, ты можешь сделать это в том же обработчике, я обновил ответ

msg 13.06.2019 22:33

Спасибо большое за вашу помощь. Я принял ваш ответ. Я дам вам знать, если у меня возникнут другие вопросы.

john 13.06.2019 22:42

Другая вещь, о которой я думаю, это когда я открываю ту же веб-страницу на другом компьютере, она должна знать, что файл был завершен (выполнено преобразование mp4=>mp3). При открытии страницы на другом компьютере Текст кнопки «Перейти» снова показывает принадлежность к определенному файлу, что неверно, поскольку этот файл уже завершен.

john 14.06.2019 16:45

@john, что, если бы вы позаботились об этом на стороне php, предварительно отключив кнопки? Если вы ищете обновления в реальном времени, я думаю, вы могли бы вместо этого использовать WebSockets. Трудно сказать, не зная больше о вашей архитектуре.

msg 14.06.2019 18:17

Другие вопросы по теме