Estoy haciendo

$.ajax({
    type: "GET",
    url: url, //valid url..The ajax part works fine
    dataType: 'html',
    success: function(response) {

        if (loginStatus !== 'false') {
            testFunction(response); //assuming there is a function called testFunction
        }
    }
});

La respuesta es un contenido mixto de html y también contiene

<script>var loginStatus = 'false'</script>

If (loginStatus! == 'false') no funciona en el éxito. ¿Qué estoy haciendo mal?

La respuesta se ve así

<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>

<body>
This is a test page
<script>var loginStatus = 'false'</script>
</body>

</html>
2
soum 12 may. 2016 a las 06:40

3 respuestas

La mejor respuesta

La solución no es bonita. Esto sería mucho más fácil si la respuesta fuera JSON. ¿Por qué no puedo analizar un Ajax html GET? La respuesta en jQuery? proporciona sugerencias para una posible solución.

Tendrá que analizar el HTML que se devuelve. Lo malo es que la parte Javascript tendrá que ser eval d (¡mala práctica!) A menos que hagas alguna expresión regular mágica para obtener el valor de la variable.

ACTUALIZACIÓN (NO HAGA ESTO):

Nuevamente, descargo de responsabilidad, esta es una mala práctica , pero es posible. Lo siguiente es solo una prueba de concepto aplicada a su código. También hay un JSFiddle con la idea básica. Básicamente, analiza la respuesta con el método .parseHTML de JQuery y evalúa el script con .globalEval, momento en el que la variable está disponible para verificar.

$.ajax({
  type: "GET",
  url: url, //valid url..The ajax part works fine
  dataType: 'html',
  success: function(response) {
    var scriptContent = $($.parseHTML(response, document, true)).filter('script').text();
    $.globalEval(scriptContent);
    // at this point, the variable loginStatus should be defined

    if (loginStatus !== 'false') {
        testFunction(response); //assuming there is a function called testFunction
    }
  }
});

Otra referencia: jQuery - jQuery analiza las etiquetas de script en HTML y no se ejecutan

3
Community 23 may. 2017 a las 12:07

Creo que no puede acceder a una variable dentro de ajax return porque su javascript no se interpreta.

No es una buena idea (y podría tener otros problemas) pero puede poner el retorno a un iframe oculto y acceder a la variable dentro usando algo como:

document.getElementById("iframeId").contentWindow.loginStatus

Si tiene control de la página que está recuperando el resultado de ajax, le recomiendo que responda solo el contenido variable o un json para manipular fácilmente en su javascript.

1
leofukui 12 may. 2016 a las 04:04
$.ajax({
    type: "GET",
    url: 'loginCheck.php', //valid url..The ajax part works fine
    dataType: 'html',
    success: function(response) {
        if (response == "YES") {
         testFunction(response); //assuming there is a function called testFunction
        }
    }
});

LoginCheck.php

// Revisa el nombre de usuario y contraseña si coincide con el nombre de usuario y la contraseña en la base de datos. luego repita "SÍ", de lo contrario repita "NO"
Le expliqué este concepto de inicio de sesión utilizando lenguaje de script PHP.

0
Eldhose Elias 12 may. 2016 a las 03:59