MC, 16:19 poniedziałek, 05.03.2012 r.
Ilustracja do artykułu: jQuery AJAX - Wywołanie konkretnej funkcji PHP

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:
$.ajax({
url: 'adres_do_strony.php',
data: {funkcja: 'jakas_funkcja'},
type: 'post',
success: function(output) {
// callback
}
});
Jak widać, przesyłamy parametr funkcja, który mówi o tym jaką funkcję chcemy wywołać.

Zawartość pliku PHP dla tego przykładu powinna być następująca:

if(isset($_POST['funkcja']) && !empty($_POST['funkcja']))
{
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:

<input id="button" type="button" value="testuj"> <input id="button2" type="button" value="inne">
<div id="wyniki"></div>

Skrypt jQuery:

<script type="text/javascript">
$(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:

if(isset($_POST['funkcja']) && !empty($_POST['funkcja']))
{
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)

Imię:
Treść:
Jarek 2019-10-31 22:07:25
Czy można wiedzieć, jaka jest struktura plików. Czy html mogę połączyć z jq i jak to poprawnie zainkludować bo wyskakuje mi "no input file specified". Podejście do tematu może być bardzo przydatne ale nie mogę go odpowiednio zaimplementować.
Administrator 2017-01-28 14:17:41
Dziękuję bardzo - poprawione :)
cenzor Internetu 2017-01-28 13:24:15
Proszę poprawić ten rażący błąd na początku artykułu "W dzisiejszym wpisie chciałbym pokazać, moim zdaniem bardzie ciekawy sposób na obejście czegoś domyślnie niemożliwego". Chodzi o słowo "bardzie". Jest to bolesne dla moich oczu i nie byłem przez to w stanie przeczytać reszty artykułu.