2010-10-14 23 views
19

estoy usando jQuery para publicar un campo de formulario en un archivo PHP que simplemente devuelve 1/0 dependiendo de si funcionaba o no ...jQuery "No se puede leer la propiedad 'defaultView' de la indefinida" error

Extracto de el código:

$.ajax({ 
    url: "ajax/save_text.php", //Relative?!? 
    //PHP Script 
    type: "POST", 
    //Use post 
    data: 'test=' + $(this).val(), 
    datatype: 'text', 
    //Pass value  
    cache: false, 
    //Do not cache the page 
    success: function(html) { 
     if (html == 1) { 
      $(this).hide().siblings('span').html($(this).value).show(); 
        alert("awesome!"); 
     } else alert('It didn\'t work!'); 
    }, 
    //Error 
    error: function() { 
     alert("Another type of error"); 
    } 
}); 

sin embargo cada vez que tiene éxito (html == 1) la consola arroja el error "TypeError no detectada: no se puede leer la propiedad 'defaultView' de la indefinida" y la alerta nunca sucede ...?

Google no parece tener mucha información sobre este error y jQuery, ¿quién sabe la causa?

Respuesta

31

Es porque this no es lo que se trataba de antes, ahora es tha ajax jQuery objeto, añadir el context option of $.ajax() así:

$.ajax({ 
    context: this, 
    url: "ajax/save_text.php", 
    ... 

De esta manera this dentro de sus devoluciones de llamada se refiere a la misma this como cuando estás llamando al $.ajax(). Alternativamente, solo retenga una referencia al this en una variable separada.

Además, tendrá que ajustar $(this).value, probablemente significó this.value o $(this).val().

+0

Muchas gracias, error tonto, prometo que me estoy poniendo mejor :-) –

+1

@Pez - no es para nada tonto, creo que es bastante contra-intuitivo también que este no es el comportamiento de contexto * default *. –

+0

Sí, esto también me mordió a mí también, después de un poco de refactorización. Gracias por la respuesta. :) – Bombe

Cuestiones relacionadas