Gibt es eine Möglichkeit, eine PHP-Funktion über eine JS-Funktion auszuführen?
etwas wie das:
<script type="text/javascript">
function test(){
document.getElementById("php_code").innerHTML="<?php
query("hello"); ?>";
}
</script>
<a href="#" style="display:block; color:#000033; font-family:Tahoma; font-size:12px;"
onclick="test(); return false;"> test </a>
<span id="php_code"> </span>
Ich möchte im Grunde die PHP-Funktion ausführen query("hello")
, wenn ich auf die href namens "Test" klicke, die die PHP-Funktion aufrufen würde.
php
javascript
html
ajax
Jason Russell
quelle
quelle
<?php query("hello"); ?>
von PHP gerendert, wenn die Seite geladen wird? Wenn ja, kann er die Ausgabequery("hello")
in js Funktion erhalten.Antworten:
Dies ist im Wesentlichen, was AJAX ist für . Ihre Seite wird geladen und Sie fügen einem Element ein Ereignis hinzu. Wenn der Benutzer das Ereignis auslöst, beispielsweise durch Klicken auf etwas, verwendet Ihr Javascript das XMLHttpRequest-Objekt , um eine Anforderung an einen Server zu senden.
Nachdem der Server geantwortet hat (vermutlich mit Ausgabe), können Sie mit einer anderen Javascript-Funktion / einem anderen Javascript-Ereignis mit dieser Ausgabe arbeiten, indem Sie sie einfach wie jedes andere HTML-Element in die Seite einfügen.
Sie können dies "von Hand" mit einfachem Javascript tun oder Sie können jQuery verwenden. Abhängig von der Größe Ihres Projekts und der jeweiligen Situation kann es einfacher sein, nur einfaches Javascript zu verwenden.
Einfaches Javascript
In diesem sehr einfachen Beispiel senden wir eine Anfrage an,
myAjax.php
wenn der Benutzer auf einen Link klickt. Der Server generiert einige Inhalte, in diesem Fall "Hallo Welt!". Wir werden mit der ID in das HTML-Element einfügenoutput
.Das Javascript
// handles the click event for link 1, sends the query function getOutput() { getRequest( 'myAjax.php', // URL for the PHP file drawOutput, // handle successful request drawError // handle error ); return false; } // handles drawing an error message function drawError() { var container = document.getElementById('output'); container.innerHTML = 'Bummer: there was an error!'; } // handles the response, adds the html function drawOutput(responseText) { var container = document.getElementById('output'); container.innerHTML = responseText; } // helper function for cross-browser request object function getRequest(url, success, error) { var req = false; try{ // most browsers req = new XMLHttpRequest(); } catch (e){ // IE try{ req = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { // try an older version try{ req = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { return false; } } } if (!req) return false; if (typeof success != 'function') success = function () {}; if (typeof error!= 'function') error = function () {}; req.onreadystatechange = function(){ if(req.readyState == 4) { return req.status === 200 ? success(req.responseText) : error(req.status); } } req.open("GET", url, true); req.send(null); return req; }
Der HTML
<a href="#" onclick="return getOutput();"> test </a> <div id="output">waiting for action</div>
Das PHP
// file myAjax.php <?php echo 'hello world!'; ?>
Probieren Sie es aus: http://jsfiddle.net/GRMule/m8CTk/
Mit einer Javascript-Bibliothek (jQuery et al.)
Das ist wohl viel Javascript-Code. Sie können das verkürzen, indem Sie die Blöcke festziehen oder natürlich engere Logikoperatoren verwenden, aber dort ist noch viel los. Wenn Sie vorhaben, in Ihrem Projekt viel Ähnliches zu tun, ist eine Javascript-Bibliothek möglicherweise besser geeignet.
Wenn Sie dasselbe HTML und PHP von oben verwenden, ist dies Ihr gesamtes Skript (mit jQuery auf der Seite). Ich habe den Code ein wenig verschärft, um dem allgemeinen Stil von jQuery besser zu entsprechen, aber Sie haben die Idee:
// handles the click event, sends the query function getOutput() { $.ajax({ url:'myAjax.php', complete: function (response) { $('#output').html(response.responseText); }, error: function () { $('#output').html('Bummer: there was an error!'); } }); return false; }
Probieren Sie es aus: http://jsfiddle.net/GRMule/WQXXT/
Beeilen Sie sich noch nicht mit jQuery: Wenn Sie eine Bibliothek hinzufügen, werden Ihrem Projekt immer noch Hunderte oder Tausende von Codezeilen hinzugefügt, genauso sicher, als hätten Sie sie geschrieben. In der jQuery-Bibliotheksdatei finden Sie ähnlichen Code wie im ersten Beispiel sowie vieles mehr . Das kann eine gute Sache sein, es kann nicht. Planen und berücksichtigen Sie die aktuelle Größe und zukünftige Erweiterungsmöglichkeiten Ihres Projekts sowie die Zielumgebung oder -plattform.
Wenn dies alles ist, was Sie tun müssen, schreiben Sie das einfache Javascript einmal und Sie sind fertig.
Dokumentation
XMLHttpRequest
auf MDN - https://developer.mozilla.org/en/XMLHttpRequestXMLHttpRequest
auf MSDN - http://msdn.microsoft.com/en-us/library/ie/ms535874%28v=vs.85%29.aspxjQuery.ajax
- http://api.jquery.com/jQuery.ajax/quelle
PHP wird auf dem Server ausgewertet. Javascript wird auf dem Client / Browser ausgewertet, daher können Sie eine PHP-Funktion nicht direkt über Javascript aufrufen . Sie können jedoch mit AJAX eine HTTP-Anforderung an den Server senden, der eine PHP-Funktion aktiviert.
quelle
Die einzige Möglichkeit, PHP von JS aus auszuführen, ist AJAX. Sie können Daten an den Server senden (z. B. GET /ajax.php?do=someFunction) und dann in ajax.php Folgendes schreiben:
function someFunction() { echo 'Answer'; } if ($_GET['do'] === "someFunction") { someFunction(); }
und dann die Antwort mit JS abfangen (ich verwende jQuery, um AJAX-Anfragen zu stellen)
Wahrscheinlich benötigen Sie ein Antwortformat. Siehe JSON oder XML, aber JSON ist mit JavaScript einfach zu verwenden. In PHP können Sie die Funktion json_encode ($ array) verwenden. welches Array als Argument bekommt.
quelle
Ich habe kürzlich ein jQuery-Plugin veröffentlicht, mit dem Sie PHP-Funktionsaufrufe auf verschiedene Arten durchführen können: https://github.com/Xaxis/jquery.php
Einfache Beispielverwendung:
// Both .end() and .data() return data to variables var strLenA = P.strlen('some string').end(); var strLenB = P.strlen('another string').end(); var totalStrLen = strLenA + strLenB; console.log( totalStrLen ); // 25 // .data Returns data in an array var data1 = P.crypt("Some Crypt String").data(); console.log( data1 ); // ["$1$Tk1b01rk$shTKSqDslatUSRV3WdlnI/"]
quelle