Spuštění PHP funkce při kliknutí na tlačítko rubrika: Programování: JavaScript
V PHP mám ve třídě Download definovanou metodu downloadFile(), která pomocí funkce file_get_contents() stáhne z webu obsah stránky a uloží ho na disk jako soubor.
class Download { static private function downloadFile() { $content = file_get_contents('http://www.adresa.cz/page.html'); $file = file_put_contents('file.txt', $content); } }
V HTML stránce mám tlačítko a chci, aby po se po kliknutí na tlačítko spustila funkce downloadFile(), tzn. aby se zaktualizoval soubor file.txt.
<button id="downloadFile">Aktualizovat</button>
Jak jsem zjistil, není možné spustit funkci v PHP JavaScriptem, to je celkem jasné. Musím použít AJAX. Tím se taky funkce PHP nespustí, ale je možné vytvořit požadavek a získat výsledek funkce downloadFile. Moje otázka je, jestli lze přímo soubor stáhnout funkcí downloadFile() bez reloadu stránky a jak toho dosáhnout?
Pročetl jsem spoustu rad na internetu, ale nemůžu to pochopit.
Díky
Jestli to chápu správně tak prostě potřebuješ aby se ti spustila metoda downloadFile() při kliknutí na tlačítko #downloadFile v nějaké html šabloně.
Podle mého názoru špatně chápeš způsob jakým funguje ajaxový request, ten totiž naprosto jednoduše spustí script, ke kterému přistoupíš přes nějakou url adresu, úplně stejně jako kdyby si na ní přistoupil manuálně (nebo třeba odkazem přes <a href="">
).
To znamená že nemůžeš implicitně volat přímo tuto funkci to musí udělat script na který přistoupíš pomocí ajaxu.
Když budu předpokládat že je metoda downloadFile() funkční a provádí to co potřebuješ pak akorát v php souboru, který chceš ajaxem spouštět vytvoříš instanci třídy Download a zavoláš tuto metodu. Na to jí budeš muset mít veřejnou a asi bylo dobré aby měla návratovou hodnotu pro případ, že budeš chtít klientovi poskytnout nějakou zpětnou vazbu o provedené akci :).
<?php class Download { public function downloadFile() { $content = file_get_contents('http://www.adresa.cz/page.html'); if(!$content) return false; if(file_put_contents('file.txt', $content)) return true; else return false; } } $obj = new Download(); if($obj->downloadFile()) echo "true"; else echo "false"; ?>
Potom například pomocí jquey provedeš ajax request na url, kde se náchází tento php soubor, například http://localhost/download.php
<button id="downloadFile">Aktualizovat</button>
$(function(){ $("#downloadFile").click(function(){ $.ajax({ type: "POST", dataType: "html", url: "download.php", success: function(result){ if(result == "true") alert("Download complete."); } }) }) })
Pro zobrazení všech 5 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem:
Komentáře