Rufen Sie die PHP-Funktion von JavaScript aus auf

80

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.

Jason Russell
quelle
4
Einfach nein, es gibt keine Möglichkeit, dies zu tun, außer die erforderliche Methode mit Ajax aufzurufen.
TheVillageIdiot
9
Sie wissen: PHP läuft auf dem Server, aber JS auf dem Client? Dies kann nicht so funktionieren.
KingCrunch
warte warte, wird nicht <?php query("hello"); ?>von PHP gerendert, wenn die Seite geladen wird? Wenn ja, kann er die Ausgabe query("hello")in js Funktion erhalten.
TheVillageIdiot
Ich weiß, dass der obige Code falsch ist, aber ich habe ihn nur verwendet, um zu zeigen, was ich will
Jason Russell
1
Mögliches Duplikat von Javascript- und PHP-Funktionen
Mark Biek

Antworten:

144

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.phpwenn 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

Chris Baker
quelle
3
-1, eine halbe Antwort, fragte OP, wie man eine PHP-Funktion aus Javascript aufruft. Pou zeigte nur, wie man eine PHP-SEITE aufruft. Sie müssen dem Ajax-Aufruf Post-Variablen hinzufügen und die PHP-Prüfung für diese Post-Variablen durchführen und dann diese PHP-Funktion aufrufen, wenn diese Post-Variablen vorhanden sind.
MH
6
@Hanoncs Mit nahezu unendlich vielen möglichen Anordnungen von serverseitigem Code ist es für mich nicht konstruktiv oder sogar möglich zu erraten, welche Architektur das OP verwendet. Dies ist auch für die unmittelbare Problemstellung nicht relevant, da das OP nicht auf POST (oder GET) verweist oder auf die Notwendigkeit, Werte zu übergeben. Ich denke, Ihre Ablehnung ist falsch, und ich werde meiner Antwort keine willkürlichen Spekulationen über ein Thema hinzufügen, das nicht im OP enthalten ist. Vielen Dank für das Feedback.
Chris Baker
Wenn ich Ihren Code verwende, wird aufgrund der Verwendung von "var" vor der Funktionsdeklaration eine Fehlermeldung angezeigt. "Var" entfernen und es funktioniert.
Jayden Lawson
16

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.

Dor
quelle
3
@ Hanoncs: Dies ist die Antwort. OP fragte, ob Sie eine PHP-Funktion über JS ausführen können. Die Antwort lautet - Sie können nicht . Wenn er hätte gefragt , ob Sie eine HTTP - Anforderung ausgeben kann , die den Web - Server machen wird ein PHP - Skript zu aktivieren , die eine PHP - Funktion ausgeführt wird - dann ja - , die möglich ist. Aber er hat nicht danach gefragt, also schreibe ich keine irrelevanten Daten.
Dor
8
Haha, komm schon Mann, du weißt, das hat das OP mit seiner Frage gemeint. Wenn er es genau so erklären könnte, würde er bereits wissen, wie es geht.
MH
11

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.

morsik
quelle
2

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/"]
Xaxis
quelle
4
Erklären Sie mir, abgesehen von der offensichtlichen Tendenz, PHP-Funktionen über JavaScript aufzurufen, genau, warum meine Antwort genauso abgelehnt wurde wie sie? Ich beantworte die vorliegende Frage zu Recht mit einer Lösung, nicht wahr?
Xaxis