jQuery AJAX - Wywołanie konkretnej funkcji PHP
W dzisiejszym wpisie chciałbym pokazać, moim zdaniem bardzo ciekawy sposób na obejście czegoś domyślnie niemożliwego - wywołania AJAX konkretnej funkcji PHP z wykorzystaniem biblioteki jQuery. Normalnie możemy jedynie przesłać parametry do konkretnej strony i wykorzystać efekty w callbacku. Jeżeli jednak bardzo chcemy wykonać konkretną funkcję ze strony do której wywołanie będzie się odnosić, co uważam za wygodne i logiczne podejście, to po odpowiednim przygotowaniu skryptu PHP, da się to zrobić.
Na czym ten sposób polega?
Aby wykonać konkretną funkcję PHP, prześlemy dodatkowy parametr, mówiący o tym jaka to ma być funkcja, zaś skrypt PHP przygotujemy tak, by przez ten parametr nastąpiło wywołanie odpowiedniej metody. Mam tutaj na myśli instrukcję switch-case. Nasze wywołanie nie będzie się zatem niczym różniło od zwykłego ajaxowego wykonania funkcji. Zerknijmy na poniższy skrypt:url: 'adres_do_strony.php',
data: {funkcja: 'jakas_funkcja'},
type: 'post',
success: function(output) {
// callback
}
});
Zawartość pliku PHP dla tego przykładu powinna być następująca:
{
switch($_POST['funkcja'])
{
case 'jakas_funkcja' :
odpowiednia_funkcja();
break;
case 'inna_funkcja' :
inna_funkcja();
break;
}
}
function odpowiednia_funkcja()
{
// Polecenia do wykonania
}
function inna_funkcja()
{
// Polecenia do wykonania
}
Myślę, że ten przykładowy, choć de facto bezużyteczny kod, jest klarowny i zrozumiały.
A może by tak coś konkretniejszego?
To teraz bardzo podobny przykład, tyle że coś robiący ;)Kod HTML:
<div id="wyniki"></div>
Skrypt jQuery:
$(window).load(function()
{
$("#button").click(function()
{
$.ajax({
url: 'funkcje.php',
data: {funkcja: 'test'},
type: 'post',
success: function(output) {
$("#wyniki").append(output);
}
});
});
$("#button2").click(function()
{
$.ajax({
url: 'funkcje.php',
data: {funkcja: 'inna'},
type: 'post',
success: function(output) {
$("#wyniki").append(output);
}
});
});
});
</script>
Kod PHP:
{
switch($_POST['funkcja'])
{
case 'test' :
test();
break;
case 'inna' :
inna();
break;
}
}
function test()
{
echo "Wywołano funkcję test()!";
}
function inna()
{
echo "Wywołano funkcję inna()!";
}
W zależności od tego, który przycisk zostanie naciśnięty, wywołana zostanie inna funkcja, a jej rezultat zostanie dopisany do elementu odpowiedniego elementu div.
Komentarze (3)