23

How to call a PHP class function from an ajax call

animal.php file

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

Then in my ajax.php file I have an ajax request, need to get values from getName function

How to do that getName() function can I do like this?

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

8 に答える 8

43

私の答えはシュールな夢の答えと同じですが、コードがあります。

初め。動物クラスOKです。そのようにしておきます:

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>

それはです。

于 2013-07-05T13:13:15.023 に答える
8

animal クラスは単独では何もできないため、スクリプトを 1 つ追加する必要があります。

まず、別のスクリプト ファイルに animal.php をインクルードします。次に、アニマル クラスのオブジェクトを作成します。これを myAnimal と呼びましょう。次に myAnimal->getName() を呼び出し、結果をエコーし​​ます。これにより、Ajax スクリプトへの応答が提供されます。

animal.php をターゲットにする代わりに、この新しいスクリプトを Ajax リクエストのターゲットとして使用します。

于 2013-07-05T12:49:12.870 に答える
2

OOP 現在 php で:

ajax.html プログラム (クライアント層) -> program.php (中間層) -> class.php (中間層) -> SQL 呼び出しまたは SP (db 層)

現在 DotNet を使用している OOP:

ajax.html プログラム (クライアント層) -> program.aspx.vb (中間層) -> class.cls (中間層) -> SQL 呼び出しまたは SP (db 層)

私の実際の解決策: OOP ではなく、OOA を実行します。

そのため、適切な ajax 呼び出しを使用して、テーブルごとに 1 つのファイル (クラスとして) を持ち、POST パラメーター (つまりモード) を使用してそれぞれの 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);
};
?>
于 2013-11-20T16:03:27.017 に答える
1

どのフレームワークを使用しているか教えてください。あなたの方法は正しいですが、ここで 2 つのことを述べたいと思います。まず、ブラウザから URL を試して、正しく機能するかどうかを確認してください。*success: function(data) * data には出力のみが含まれます。そのため、return ではなくEchoを使用してください

于 2013-07-05T12:52:25.813 に答える
0

価値のあるものとして、オブジェクトを投稿として受け入れる PHP プロキシ ファイルを使用しました。ここに投稿します。クラス名、メソッド名、パラメーター (配列として)、および戻り値の型を提供することで機能します。これも、指定された実行クラスと、返されるコンテンツ タイプの限られたセットのみに限定されます。

        <?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"
                });
于 2014-06-16T18:40:54.560 に答える