web-dev-qa-db-fra.com

AJAX demande et PHP fonctions de classe

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>
17
rajesh

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.

34
Tomas Prado

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.

8
Surreal Dreams

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);
};
?>
2
gtryonp

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 

1
Nabeel Arshad

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();
}

?>
0
Gaurav

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";
  }
}
0
RinShan Kolayil

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"
                });
0
Salvatore Giacinto