es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En HTML/JavaScript, ¿cómo puedo enviar varias publicaciones desde un solo botón, lo que resulta en la apertura de una nueva página en una nueva pestaña?

¿Cómo puedo enviar múltiples solicitudes de apertura de páginas a través de una solicitud POST desde un solo formulario/botón?

Actualmente tengo una tabla en la que cada fila representa un artista y una canción, y en cada fila hay un botón “Desvincular” que utiliza un formulario para enviar una acción POST a un servidor que resulta en la apertura de una nueva página en una nueva pestaña, y esto funciona bien.





Lo que quiero poder hacer es también tener un botón “Desvincular todo por artista” que encuentre todas las filas con el mismo artista que la fila en la que se hizo clic y luego envíe una solicitud POST para cada una.

Entonces, puedo encontrar las filas correctamente usando getElementsByName(), mi dificultad es que no entiendo cómo enviar múltiples solicitudes, cada una con una nueva página abierta en una nueva pestaña.

Supongo que mi JavaScript para DesvincularTodoPorArtista encontraría las filas requeridas y luego, para cada fila, llamaría a otra función JavaScript para enviar la solicitud POST, pero ¿cómo hago esta segunda parte?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una forma de enviar múltiples peticiones POST, donde cada una resulte en una nueva página abierta en una nueva pestaña, es utilizar el método window.open() en JavaScript.

    Aquí te mostramos cómo puedes modificar tu código para lograr esto:

    1. En tu función JavaScript UnlinkAllByArtist, puedes encontrar todas las filas con el mismo nombre de artista utilizando getElementsByName() y recorrer cada una de ellas.
    2. Para cada fila, puedes crear un nuevo elemento de formulario con los inputs relevantes y enviarlo utilizando el método submit().

    3. Antes de enviar el formulario, puedes utilizar el método window.open() para abrir una nueva pestaña con la URL de la acción del formulario. Puedes establecer el destino del formulario en un iframe oculto o utilizar el objeto XMLHttpRequest para enviar la petición POST de forma asíncrona y evitar navegar lejos de la página actual.

    Aquí tienes un ejemplo de cómo podría verse tu código modificado:

    function UnlinkAllByArtist(artistName) {
      var rows = document.getElementsByName('artist_and_song');
      for (var i = 0; i < rows.length; i++) {
        var row = rows[i];
        if (row.cells[0].innerText === artistName) {
          var form = document.createElement('form');
          form.target = '_blank';
          form.method = 'POST';
          form.action = 'https://acoustid.org/edit/toggle-track-mbid';
    
          var stateInput = document.createElement('input');
          stateInput.type = 'hidden';
          stateInput.name = 'state';
          stateInput.value = '1';
          form.appendChild(stateInput);
    
          var trackIdInput = document.createElement('input');
          trackIdInput.type = 'hidden';
          trackIdInput.name = 'track_id';
          trackIdInput.value = row.cells[1].innerText; // suponiendo que el ID de la canción está en la segunda celda
          form.appendChild(trackIdInput);
    
          var mbidInput = document.createElement('input');
          mbidInput.type = 'hidden';
          mbidInput.name = 'mbid';
          mbidInput.value = row.cells[2].innerText; // suponiendo que el MBID del artista está en la tercera celda
          form.appendChild(mbidInput);
    
          // abrir una nueva pestaña con la URL del formulario y enviar el formulario
          window.open(form.action, '_blank');
          form.submit();
        }
      }
    }
    

    Nota: Esta es solo una aproximación y puede haber otras formas de lograr el mismo resultado. Asegúrate de probar tu código a fondo antes de implementarlo en producción.

Comments are closed.