Comment appeler une fonction de classe PHP à partir d'un appel ajax
fichier animal.php
class animal
{
function getName()
{
return "lion";
}
}
Ensuite, dans mon fichier ajax.php
, j'ai une requête ajax, il faut obtenir les valeurs de la fonction getName
Comment faire cette fonction getName()
puis-je faire comme ça?
<script type=text/javascript>
$.ajax({
type: "POST",
data: {
invoiceno:jobid
},
url: "animal/getName",
beforeSend: function() {
},
dataType: "html",
async: false,
success: function(data) {
result=data;
}
});
</script>
Ma réponse est la même que Surreal Dreams answer , mais avec le code.
Premier. Animal de classe est OK. Laissez comme ça:
animal.php
<?php
class animal
{
function getName()
{
return "lion";
}
}
Suivant. Créez un nouveau fichier animalHandler.php
.
<?php
require_once 'animal.php';
if(isset( $_POST['invoiceno'] )) {
$myAnimal = new animal();
$result = $myAnimal->getName();
echo $result;
}
Finalement. Changez votre Javascript.
<script type=text/javascript>
$.ajax({
type: "POST",
data: {
invoiceno:jobid
},
url: "animalHandler.php",
dataType: "html",
async: false,
success: function(data) {
result=data;
}
});
</script>
C'est.
Vous avez besoin d'un script supplémentaire, car votre classe d'animaux ne peut rien faire seule.
Tout d'abord, dans un autre fichier de script, incluez animal.php. Créez ensuite un objet de la classe animal - appelons-le myAnimal. Ensuite, appelez myAnimal-> getName () et renvoyez les résultats. Cela fournira la réponse à votre script Ajax.
Utilisez ce nouveau script comme cible de votre demande Ajax au lieu de cibler animal.php.
POO Actuellement avec php:
programme ajax.html (niveau client) -> programme.php (niveau intermédiaire) -> class.php (niveau intermédiaire) -> appel SQL ou SP (niveau base de données)
POO actuellement avec DotNet:
programme ajax.html (niveau client) -> programme.aspx.vb (niveau intermédiaire) -> class.cls (niveau intermédiaire) -> appel SQL ou SP (niveau base de données)
Ma solution réelle: Do OOA, ne pas OOP.
J'ai donc un fichier par table (en tant que classe) avec les appels ajax appropriés et sélectionne l'appel ajax respectif avec un paramètre POST (c'est-à-dire, le mode).
/ * mytable.php * /
<?
session_start();
header("Content-Type: text/html; charset=iso-8859-1");
$cn=mysql_connect ($_server, $_user, $_pass) or die (mysql_error());
mysql_select_db ($_bd);
mysql_set_charset('utf8');
//add
if($_POST["mode"]=="add") {
$cadena="insert into mytable values(NULL,'".$_POST['txtmytablename']."')";
$rs=mysql_query($cadena,$cn) or die(mysql_error().' : '.$cadena);
};
//modify
if($_POST["mode"]=="modify") {
$cadena="update mytable set name='".$_POST['txtmytablename']."' where code='".$_POST['txtmytablecode']."'";
$rs=mysql_query($cadena,$cn) or die(mysql_error().' : '.$cadena);
};
//erase
if($_POST["mode"]=="erase") {
$cadena="delete from mytable where code='".$_POST['txtmytablecode']."'";
$rs=mysql_query($cadena,$cn) or die(mysql_error().' : '.$cadena);
};
// comma delimited file
if($_POST["mode"]=="get") {
$rpta="";
$cadena="select * from mytable where name like '%".$_POST['txtmytablename']."%'";
$rs=mysql_query($cadena,$cn) or die(mysql_error().' : '.$cadena);
while($row = mysql_fetch_array($rs)) {
$rowCount = mysql_num_fields($rs);
for ($columna = 0; $columna < $rowCount; $columna++) {
$rpta.=str_replace($row[$columna],",","").",";
}
$rpta.=$row[$columna]."\r\n";
}
echo $rpta;
};
//report
if($_POST["mode"]=="report_a") {
$cadena="select * from mytable where name like '%".$_POST['txtmytablename']."%'";
$rs=mysql_query($cadena,$cn) or die(mysql_error().' : '.$cadena);
while ($row=mysql_fetch_array($rs)) {
echo $row['code']." ".$row['name']."<br/>"; // colud be a json, html
};
};
//json
if($_POST["mode"]=="json_a") {
$cadena="select * from mytable where name like '%".$_POST['txtmytablename']."%'";
$rs=mysql_query($cadena,$cn) or die(mysql_error().' : '.$cadena);
$result = array();
while ($row=mysql_fetch_array($rs)) {
array_Push($result, array("id"=>$row['code'],"value" => $row['name']));
};
echo json_encode($result);
};
?>
Pouvez-vous s'il vous plaît mentionner lequel utilisez-vous un quelconque Framework? Commencez par essayer votre URL depuis le navigateur et vérifiez si elle fonctionne correctement. Deuxièmement, n'utilisez pas return, dans * success: function (data) * data contiendra uniquement la sortie. alors utilisez Echo plutôt que de revenir
Essayez ceci: Ajax mis à jour:
$("#submit").on('click', (function(e){
var postURL = "../Controller/Controller.php?action=create";
$.ajax({
type: "POST",
url: postURL,
data: $('form#data-form').serialize(),
success: function(data){
//
}
});
e.preventDefault();
});
Mise à jour de Contoller:
<?php
require_once "../Model/Model.php";
require_once "../View/CRUD.php";
class Controller
{
function create(){
$nama = $_POST["nama"];
$msisdn = $_POST["msisdn"];
$sms = $_POST["sms"];
insertData($nama, $msisdn, $sms);
}
}
if(!empty($_POST) && isset($_GET['action']) && $_GET['action'] == ''create) {
$object = new Controller();
$object->create();
}
?>
Pour chaque demande ajax, ajoutez deux données, l'une est le nom de la classe et l'autre, le nom de la fonction Créer une page php comme suit
<?php
require_once 'siteController.php';
if(isset($_POST['class']))
{
$function = $_POST['function'];
$className = $_POST['class'];
// echo $function;
$class = new $className();
$result = $class->$function();
if(is_array($result))
{
print_r($result);
}
elseif(is_string($result ) && is_array(json_decode($result , true)))
{
print_r(json_decode($string, true));
}
else
{
echo $result;
}
}
?>
La demande Ajax est la suivante
$.ajax({
url: './controller/phpProcess.php',
type: 'POST',
data: {class: 'siteController',function:'clientLogin'},
success:function(data){
alert(data);
}
});
La classe est la suivante
class siteController
{
function clientLogin()
{
return "lion";
}
}
Pour ce que ça vaut, j'ai utilisé un fichier proxy PHP qui accepte un objet comme un article - je le posterai ici. Cela fonctionne en fournissant le nom de la classe, le nom de la méthode, les paramètres (sous forme de tableau) et le type de retour. Cela se limite également à l’exécution des classes spécifiées et à un ensemble limité de types de contenu à renvoyer.
<?php
// =======================================================================
$allowedClasses = array("lnk","objects"); // allowed classes here
// =======================================================================
$raw = file_get_contents("php://input"); // get the complete POST
if($raw) {
$data = json_decode($raw);
if(is_object($data)) {
$class = $data->class; // class: String - the name of the class (filename must = classname) and file must be in the include path
$method = $data->method; // method: String - the name of the function within the class (method)
@$params = $data->params; // params: Array - optional - an array of parameter values in the order the function expects them
@$type = $data->returntype; // returntype: String - optional - return data type, default: json || values can be: json, text, html
// set type to json if not specified
if(!$type) {
$type = "json";
}
// set params to empty array if not specified
if(!$params) {
$params = array();
}
// check that the specified class is in the allowed classes array
if(!in_array($class,$allowedClasses)) {
die("Class " . $class . " is unavailable.");
}
$classFile = $class . ".php";
// check that the classfile exists
if(stream_resolve_include_path($classFile)) {
include $class . ".php";
} else {
die("Class file " . $classFile . " not found.");
}
$v = new $class;
// check that the function exists within the class
if(!method_exists($v, $method)) {
die("Method " . $method . " not found on class " . $class . ".");
}
// execute the function with the provided parameters
$cl = call_user_func_array(array($v,$method), $params );
// return the results with the content type based on the $type parameter
if($type == "json") {
header("Content-Type:application/json");
echo json_encode($cl);
exit();
}
if($type == "html") {
header("Content-Type:text/html");
echo $cl;
exit();
}
if($type == "text") {
header("Content-Type:text/plain");
echo $cl;
exit();
}
}
else {
die("Invalid request.");
exit();
}
} else {
die("Nothing posted");
exit();
}
?>
Pour appeler cela depuis jQuery, vous feriez alors:
var req = {};
var params = [];
params.Push("param1");
params.Push("param2");
req.class="MyClassName";
req.method = "MyMethodName";
req.params = params;
var request = $.ajax({
url: "proxy.php",
type: "POST",
data: JSON.stringify(req),
processData: false,
dataType: "json"
});