2017-06-11 12 views
0

Ich mache eine Website mit mehreren Aufrufen von PHP über AJAX, jetzt verwendet AJAX POST, um eine Echo-Zeichenfolge von PHP zu erhalten, vergleicht diese dann in einem Schalter und macht dann, was erforderlich ist. Beispiel in dem folgenden CodeAufruf einer JS-Funktion von PHP

function submitPHP(dataForPHP){ 
    //Runs ajax request 
    $.ajax({ 
     type : "POST", 
     url : 'initPHP.php', 
     dataType : 'text', 
     data : dataForPHP, 
     success : function(data){ 
      //Checks echoed data from PHP 
      switch(data){ 
       case "LOGIN_ACCEPTED": 
        loggedInFunction(); 
        break; 
       case "LOGIN_FAILED": 
        loggedInFailedFunction(); 
        break; 
      } 
     } 
    }); 
} 

Ich denke, wenn es eine Möglichkeit für die PHP ist zurück, welche Funktion (wie „loggedInFunction();“) Ich möchte anstelle einer Zeichenfolge nennen, die ich dann haben, vergleichen und dann die Funktion aufrufen? Ich kann den AJAX ändern, um JSON stattdessen zu verwenden, wenn das tut.

Ich habe mich auf anderen ähnlichen Fragen hier auf Stack auf den meisten von ihnen gesucht wollen eine ganze Funktion Echo, die nicht das ist, was ich tun möchte.

Vielen Dank im Voraus!

+0

Ich denke, dass, was Sie tun möchten, ist JSONP: https://Stackoverflow.com/a/3840118/4949918 – Axnyff

+0

Ich denke [this] (https://stackoverflow.com/questions/912596/how-to-turn-ein-string-in-ein-javascript-funktion-anruf) könnte das sein, was Sie suchen. Ich finde es ein bisschen merkwürdig, dass Sie das Back- und Frontend so eng koppeln wollen, aber es ist möglich. Letztes Wort des Rates: gehen Sie nicht die Eval-Route hinunter. Da sind Drachen. –

+4

Sie wollen nicht tun, was Sie tun möchten. Es ist nicht das Geschäft von PHP, überhaupt zu wissen, welche Funktion in JS aufgerufen werden soll, noch ist es das Geschäft von JS, PHP zu sagen, welche Funktionen zu verwenden sind.Halten Sie sie getrennt und verwenden Sie eine Schnittstelle für die Kommunikation zwischen den beiden Enden, oder Sie werden am Ende PHP debuggen müssen, weil Sie etwas in JS geändert haben und umgekehrt – Thomas

Antwort

0

Ich würde das tun.

  1. Verwenden Sie HTTPS, um Login durchzuführen, HTTP ist heutzutage wirklich unsicher;
  2. erstellen Controller Objekt mit allen erlaubt Methoden (Aktionen);
  3. rufen Sie eine Aktion davon Controller.

Die Idee, ein Controller mit auf mehreren Ebenen bequem ist:

  • Sicherheit: Wenn ein Verfahren nicht in der Controller ist Sie es nicht nennen kann, so ist es ein Weg, um zu wissen, was kann angerufen werden und was absolut nicht möglich ist zu nennen;
  • Zusammenhalt: die Methoden sind alle nebeneinander und einfacher zu pflegen;
  • Kapselung: Wenn es einen Zustand gibt, kann es leicht im Kontext des Objekts gehalten werden.

Dies ist ein Beispiel:

loginController = { 
    "acceptAction": function() { 
    }, 
    "failAction": function() { 
    } 
}; 

Sie jetzt diese Methoden aus der AJAX-Handler aufrufen können. Sagen Sie, der Server sagt Ihnen, was Sie tun müssen. A Verb sozusagen, wie accept oder fail. Sie können dann tun:

"success": function (data) { 
    loginController[data + "Action"](); 
} 

Und das ist es.

BTW: das ist nur das sehr grundlegende MVC-Muster. Oldie aber goldie :)