2010-08-19 8 views
12

Powiedzmy mam wywołania AJAX z jQuery tak:użyciu ajax beforeSend zmodyfikować dane

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

Chciałbym, aby móc dodać do Mydata korzystając

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

wynik powinien być, że wszystkie wywołania ajax (zarówno post i get) są modyfikowane, więc jeśli dostanę dodatkowy parametr IsAjax = true

+0

Nie można edytować zmiennej przed wprowadzeniem jej do wywołania ajax? – Neal

+0

Można, ale to nie byłoby bardzo suche. – Mario

Odpowiedz

11

This blog post wyjaśnia, w jaki sposób można użyć $.ajaxSetup, aby dodać dane. Gromadzi jak $.extend Wystarczy to zrobić:

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

1) nie trzeba zwracać wartości true (po prostu nie zwracaj wartości false) 2) Myślę, że w tym momencie dane już stały się sparametryzowanym ciągiem znaków, więc należy dodać & isAjax = true (ponieważ nie jest już obiektem, który można rozszerzyć). – Dtipson

+0

1) To dobry nawyk, aby dokonać zwrotu w przypadku, gdy ma to wpływ na funkcjonalność. 2) Myślę, że to zależy od tego, jaki format danych przekazujesz ** ajax ** funkcja – verybadbug

+0

1) OK, ale w przypadku tej konkretnej funkcji nie ma to wpływu na funkcjonalność, więc nadal nie jest konieczne. Nie wszystkie funkcje muszą zwracać cokolwiek (dlatego ściślejsze języki definiują pewne funkcje jako "puste"). 2) Nie sądzę, aby miało to znaczenie jaki format był (pobierz lub opublikuj, dane obj/string). dane przekazywane jako obiekt natywny nadal są rejestrowane jako sparametryzowane ciągi znaków w ramach tej funkcji. – Dtipson

2

Można tylko faktycznie korzysta beforeSend w $ .ajax();

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