2010-08-19 20 views
12

Digamos que tengo una llamada Ajax de jQuery como esto:usando ajax beforeSend para modificar los datos

$.ajax({ 
    url: myUrl, 
    data: myData, 
    type:'post' 
}); 

Me gustaría ser capaz de añadir a la myData usando

$.ajaxSetup({ 
    beforeSend: function(call){...} 
}); 

El resultado debe sea ​​que todas las llamadas ajax (tanto post como get) se modifiquen así que si obtengo un parámetro extra IsAjax = true

+0

¿No puedes editar la variable antes de ponerla en la llamada ajax? – Neal

+0

Podrías, pero eso no sería muy SECO. – Mario

Respuesta

11

This blog post explica cómo puede usar $.ajaxSetup para agregar datos. Se acumula como $.extend a hacer esto:

$.ajaxSetup({ 
    data:{ 
    isAjax:true 
    } 
}); 
22
$.ajaxSetup({ 
    beforeSend: function(jqXHR, settings) { 
    settings.data = $.extend(settings.data, {isAjax: true}); 
    return true; 
    } 
}); 
+0

1) no es necesario que devuelva verdadero (simplemente no devuelva falso) 2) Creo que en este momento, los datos ya se han convertido en una cadena parametrizada, por lo que necesitaría agregar & isAjax = fiel a ella (ya que ya no es un objeto que se puede extender). – Dtipson

+0

1) Es un buen hábito para devolver en caso de que afecte la funcionalidad. 2) Creo que depende de qué formato de datos pases en ** ajax ** función – verybadbug

+0

1) Bien, pero en el caso de esta función en particular, no afecta la funcionalidad, por lo que aún no es necesario. No todas las funciones necesitan devolver nada (es por eso que los lenguajes más estrictos definen ciertas funciones como "nulas"). 2) No creo que importe el formato (get o post, data obj/string). los datos pasados ​​como un objeto nativo aún se registran como una cadena parametrizada dentro de esta función. – Dtipson

2

Usted sólo puede utilizar realmente en beforeSend $ .ajax();

$.ajax({ 
    beforeSend: function(xhr){ 
    this.data += '&' + $.param({ 
     param: 'test' 
    }); 
    } 
}); 
Cuestiones relacionadas