variable global jQuery y AJAX

tengo código jQuery a continuación ..

(function( $ ) {

$.fn.pokerClass = function( test ) {
    var test;

    this.a = function(){
                    $.ajax({
                        type: "POST",
                        url: "http://127.0.0.1/test.php",
                        success: function(data){
                            var json = $.parseJSON(data);
                            test = json.value; 
                            }
                    });
    }
    this.b = function() {
        alert("i am " + test);
    };
    this.class_var = test;
    return this;
};


})( jQuery );

HTML:

var t = $(document.body).testClass();
t.a();
t.b();

Recibo la respuesta "no estoy definido". Alguien me puede ayudar como solucionar este problema?

preguntado el 29 de junio de 12 a las 20:06

3 Respuestas

Su llamada ajax se ejecuta de forma asincrónica, por lo que cuando t.b(); es ejecutado, test todavía no tiene valor.

Podría ejecutar la llamada ajax sincrónicamente (async:false) o corre t.b(); dentro success llamar de vuelta

Respondido el 29 de junio de 12 a las 20:06

Estás usando el Asincrónico de ajax, lo que significa que el sistema no esperará a que ajax termine para continuar con el resto.

Sólo tiene que utilizar

$.ajax({
                        type: "POST",
                        async:false, /* Note this */
                        url: "http://127.0.0.1/test.php",
                        success: function(data){
                            var json = $.parseJSON(data);
                            test = json.value; 
                            }
                    });

Respondido el 29 de junio de 12 a las 20:06

  • Creo que quieres llamar pokerClassno, testClass?

  • Recibes una advertencia de que testya está definido. Es el argumento de la función y lo declaras de nuevo con var test;. Puede eliminar el argumento de la función ya que no pasa nada a la función.

  • Llene la obtener datos JSON, haces un POST solicitud sin enviar nada. Considere usar el función getJSON en cambio, aunque no puede establecer la configuración asíncrona usando esa función abreviada. También puede configurar el dataType de la respuesta esperada a json. Entonces se analiza automáticamente.

  • Como dijo Claudio Redi (primero): configure la llamada ajax en async:false. Es posible que desee ver el algo avanzado .when() función para esperar la respuesta de una solicitud asíncrona.

No probado:

(function( $ ) {
  $.fn.pokerClass = function( ) {
    var test;

    this.a = function(){
      $.ajax({
        type: "GET",
        async: false,
        dataType: "json",
        url: "http://127.0.0.1/test.php",
        success: function(data){
          test = data.value;
        },
        error: function(){
          console.log("Did not work.");
        }
      });
    };
    this.b = function() {
      console.log("I am " + test);
    };
    this.class_var = test;
    return this;
  };
})( jQuery );

var t = $("document.body").pokerClass();
t.a();
t.b();

Respondido el 29 de junio de 12 a las 20:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.