0

Tengo este código. Despues de ejecutarse el ajax compruebo que se han insertado correctamente los datos y en la consola veo "inserted". Pero por alguna razón que desconozco el código dentro del condicional no se ejecuta. ¿Alguien sabe a que se debe?

Muchas gracias de antemano.

   $.ajax({
        url: './libs/php/queue_song.php',
        method: 'POST',
        dataType: 'text',
        data: {
            songTitle: songTitle
        },
        success: function(response) {
            console.log(response)
            if (response == "inserted") {
                console.log("Song inserted successfully")
            } else if (response == "error") {
                console.log("Error")
            }
        }
    })```
PeZGoRdO
  • 3
  • 1
  • El console a `response` ¿qué respuesta trae? – BetaM Apr 06 '21 at 23:59
  • por la consola veo "inserted" – PeZGoRdO Apr 07 '21 at 00:15
  • 1
    Limpia `response` con `trim()` ya que a veces los datos del servidor vienen con un salto de línea como he explicado en [esta respuesta](https://es.stackoverflow.com/a/103952/29967). – A. Cedano Apr 07 '21 at 00:18
  • Para limpiar la respuesta puedes hacer algo así: **`var s=response.trim(); if (s == "inserted") { console.log("Song inserted successfully"); } else if (s == "error") { console.log("Error"); }`** Para más claridad he guardado la respuesta limpia en una variable `s` la cual se usa luego en los `if` – A. Cedano Apr 07 '21 at 00:24
  • Bingo! Se me ha quitado hasta el dolor de cabeza!! XD Gracias – PeZGoRdO Apr 07 '21 at 07:13

1 Answers1

0

Es porque tu respuesta no sigue buenas prácticas.

Cuando trabajas con un API, generalmente se utiliza JSON. Seguramente tu endpoint /libs/php/queue_song.php devuelve una respuesta tipo plain/text en cuyo cuerpo se encuentra la cadena "inserted", por eso se ve en la consola pero es incapaz de comprobar si response == "inserted".

Por buena práctica, tu endpoint /libs/php/queue_song.php debe devolver un JSON tipo: {"response": "inserted"}.

Verifica, por una parte, que tu que tu endpoint devuelva un content-type: application/json, por otra, que el objeto tenga como key algo que consultes en tu AJAX:

success: function(response) {
  response // {"response": "inserted"}
  response.response // "inserted"
  response.response == "inserted" // true
  // ...
}

Puedes seguir esta documentación para ver cómo devolver un JSON con PHP: https://www.w3schools.com/js/js_json_php.asp

Devandmus
  • 667
  • 2
  • 7
  • Sería mejor citar documentación oficial: https://www.php.net/manual/es/function.json-encode.php – BetaM Apr 07 '21 at 01:19
  • Gracías. No sabía que usar el formato texto eran malas practicas. El problema se arregló con la solución del response.trim() pero ya que me comentas todo esto lo cambiaré por formato json para evitar futuros dolores de cabeza. – PeZGoRdO Apr 07 '21 at 08:57