2011-05-09 18 views
15

Tengo el siguiente códigoUso variable fuera la función del éxito de una llamada AJAX/jQuery

var test; 
    $.ajax({ 
     type: "GET", 
     url: "../views/person/controller.php?actor=person&action=checkAge", 
     data: "age=" + value, 
     success: function(msg){ 
      console.log(msg); 
      test = msg; 
     }, 
    }); 
    Validate.fail(test); 

Ahora la prueba var debe dar la verdadera de la falsa como la consola Qué dice. Pero probar var me da indefinido ¿por qué?

Respuesta

19

Probablemente porque Validate.fail (prueba) se produce inmediatamente después de la llamada asincrónica. Recuerde que es ASÍNCRONO, lo que significa que se ejecuta en paralelo a javascript que se ejecuta en su página.

+1

Tnx esto me ayudó. Encontré la solución Al hacer async: falso, llamar a la propiedad – DownDown

+1

Me alegro de que lo hayas descifrado, pero te recomiendo que reconsideres tu solución. No puedo decir que entiendo el aspecto de su aplicación, pero una llamada síncrona ajax sobre todo derrota el propósito de Ajax. Aclamaciones. –

+0

Tnx para que vuelvas a dar propina. Pero para este propósito es realmente necesario. Intentaré evitar esta solución en el futuro :) – DownDown

-1

¿Qué sucede cuando elimina "var" antes del término "prueba" cuando lo declara?

no estoy seguro de cómo la función de devolución de llamada se trata con jQuery, ya que se envuelve dentro de algunos otros métodos extendidos .. Pero la razón por la que digo licencia var a cabo en la declaración de la variable test es que los cesionarios var prueba para ser relativa al alcance. Si su devolución de llamada está siendo tratada de cierta manera, puede perder el alcance donde se define test. Es posible que desee dejar la asignación var y dejarla como una variable global. Quizás esto lo hará visible?

EDIT :: No me di cuenta de que estaba haciendo referencia al término dentro de una llamada de función después de la solicitud asíncrona, sugiero incluir la última declaración en su devolución de llamada.

:)

+0

para nada cierto – Atticus

+2

var describe la variable relativa al alcance ... si la deja fuera se convierte en una variable global ... investigue antes de hablar;) – Atticus

+0

mala práctica de programación .. hah. – Atticus

21
var test; <-- (1) This code runs first 
$.ajax({ <-- (2) Then this runs 
    type: "GET", 
    url: "../views/person/controller.php?actor=person&action=checkAge", 
    data: "age=" + value, 
    success: function(msg){ 
     console.log(msg); <-- (4) Finally this is run. IF your request is a success 
     test = msg; 
    }, 
}); 
Validate.fail(test); <-- (3) This runs third 

Observe el orden en que se ejecuta el código. La variable simplemente no está disponible en ese momento, ya se está ejecutando cuando el código se activa a través de la devolución de llamada

3
<!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
$(document).ready(function(){ 
var xm; 

    $("#txt").ajaxComplete(function(){ 
    $('#txt').html(xm); 
    }); 

    $("button").click(function(){ 

    $.ajax({ 
     url: 'DBresult_load.php', 
     dataType: 'html', 
     data: { },     //you can pass values here 
     success: function(result) {xm =result;} 
    }); 
    }); 


}); 
</script> 
</head> 
<body> 

<div id="txt"><h2>Let AJAX change this text</h2></div> 
<button>Change Content</button> 
</body> 
</html> 

Aquí está la solución para pasar valores a la variable de petición Ajax. Espero que esto ayude.

1
enter code here var test; 
$.ajax({ 
    type: "GET", 
    async: false, 
    url: "../views/person/controller.php?actor=person&action=checkAge", 
    data: "age=" + value, 
    success: function(msg){ 
     console.log(msg); 
     test = msg; 
    }, 
}); 
Validate.fail(test); 

// Haga su función sincrónica ajax, establecer el parámetro JSON "asíncrono: true", por lo javascript tiene que esperar hasta que la prueba se le asigna un valor.

Cuestiones relacionadas