AJAX 请求和PHP类函数

nvbavucw  于 2023-03-28  发布在  PHP
关注(0)|答案(9)|浏览(132)

如何从 AJAX 调用调用PHP类函数
animal.php文件

class animal
{     
  function getName()
  {
    return "lion";
  }
}

然后在我的ajax.php文件中,我有一个 AJAX 请求,需要从getName函数中获取值
getName()函数怎么做可以这样做?

<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>
lawou6xi

lawou6xi1#

我的答案与Surreal Dreams answer相同,但有代码。
第一,班级动物没问题,就这样吧
animal.php

<?php

class animal
{     
  function getName()
  {
    return "lion";
  }
}

接下来,创建一个新的animalHandler.php文件。

<?php
require_once 'animal.php';

if(isset( $_POST['invoiceno'] )) {
     $myAnimal = new animal();
     $result = $myAnimal->getName();
     echo $result;
}

最后,更改您的Javascript。

<script type=text/javascript>
  $.ajax({
    type: "POST",
    data: {
      invoiceno:jobid
    },
    url: "animalHandler.php",
    dataType: "html",
    async: false,
    success: function(data) {
      result=data;
    }
  });    
</script>

就是这样

j5fpnvbx

j5fpnvbx2#

你需要一个额外的脚本,因为你的动物类不能自己做任何事情。
首先,在另一个脚本文件中,包含animal.php。然后创建animal类的对象-我们称之为myAnimal。然后调用myAnimal-〉getName()并回显结果。这将提供对 AJAX 脚本的响应。
使用这个新脚本作为 AJAX 请求的目标,而不是以animal.php为目标。

wlsrxk51

wlsrxk513#

OOP当前使用PHP:
ajax.html程序(客户端层)-〉program.php(中间层)-〉class.php(中间层)-〉SQL调用或SP(数据库层)
OOP目前使用DotNet:
ajax.html程序(客户端层)-〉program.aspx.vb(中间层)-〉class.cls(中间层)-〉SQL调用或SP(数据库层)
我的现实生活解决方案:做OOA,不要OOP。
因此,我为每个表准备了一个文件(作为一个类),其中包含相应 AJAX 调用,并使用POST参数(即mode)选择相应的ajax调用。
/* 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);
};
?>
tzdcorbm

tzdcorbm4#

你能说一下你在使用哪个框架吗?你的方法是正确的,但我想在这里提两件事。首先,从浏览器尝试你的URL,检查它是否正常工作。其次,不要使用return,在 success:function(data) data将只包含输出。所以使用Echo而不是返回

6g8kf2rb

6g8kf2rb5#

我使用了一个PHP代理文件,它接受一个对象作为post --我将在这里发布它。它通过提供类名、方法名、参数(作为数组)和返回类型来工作。这也被限制为只执行指定的类和要返回的有限的内容类型集。

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

    ?>

要从jQuery调用它,你可以这样做:

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"
                });
bfrts1fy

bfrts1fy6#

试试这个:更新的 AJAX :

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

更新控制器:

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

?>
4ngedf3f

4ngedf3f7#

对于每个 AJAX 请求添加两个数据,一个是类名,另一个是函数名创建php页面,如下所示

<?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;
}

}
?>

AJAX 请求如下

$.ajax({
                        url: './controller/phpProcess.php',
                        type: 'POST',
                        data: {class: 'siteController',function:'clientLogin'},
                        success:function(data){
                            alert(data);
                        }
                    });

类如下

class siteController
{     
  function clientLogin()
  {
    return "lion";
  }
}
kuarbcqp

kuarbcqp8#

我认为这将是一个圆滑的解决方案,通过 AJAX 调用静态PHP方法,这也将在更大的应用程序中工作:

  • AJAX _handler.php**
<?php

// Include the class you want to call a method from

echo (new ReflectionMethod($_POST["className"], $_POST["methodName"]))->invoke(null, $_POST["parameters"] ? $_POST["parameters"] : null);

some.js

function callPhpMethod(className, methodName, successCallback, parameters = [ ]) {
    $.ajax({
        type: 'POST',
        url: 'ajax_handler.php',
        data: {
            className: className,
            methodName: methodName,
            parameters: parameters
        },
        success: successCallback,
        error: xhr => console.error(xhr.responseText)
    });
}

问候语^^

yr9zkbsy

yr9zkbsy9#

这是非常简单的调用类函数使用 AJAX 发送类函数名称沿着ajax请求.
/ AJAX 代码

$.ajax({
url: "ajax.php",
type: "POST",
data: {tid: pId,fun: 'get_hours_by_id'}, //fun key indicate function name
cache: false,
beforeSend: function(){
    $('.btn-disable').prop('disabled', true);
},
error:function(xhr, status, error){                 
    Swal.fire({
        icon: 'error',
        title: 'Error',
        text: error,
    })
    $('.btn-disable').prop('disabled', false);          
},
success: function(response){

}
});

//类 AJAX 代码

<?PHP
if (isset($_POST['fun'])) 
{
    $Ajax_Object = new ajax();
    $data = strval($_POST['fun']);
    $result = $Ajax_Object->$data(); //call class function and return result.
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($result);
}
class ajax 
{
    public function get_hours_by_id() 
    {
        $reponse = array(
            'data'  => 0,
            'status' => false,
            'message' => "hello"
        );
        return $reponse;  
    }
}
?>

相关问题