Функции AJAX и функции класса PHP

Как вызвать функцию класса PHP из вызова ajax

Файл 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> 

Мой ответ такой же, как и у Surreal Dreams , но с кодом.

Первый. Классное животное в порядке. Оставьте это так:

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> 

Вот это.

Вам нужен еще один скрипт, потому что ваш класс животных не может ничего сделать сам по себе.

Во-первых, в другом файле сценария, include animal.php. Затем сделайте объект класса животных – назовем его myAnimal. Затем вызовите myAnimal-> getName () и выполните эхо-результаты. Это обеспечит ответ на ваш сценарий Ajax.

Используйте этот новый скрипт в качестве цели вашего запроса Ajax вместо таргетинга на animal.php.

OOP В настоящее время с php:

ajax.html (клиентский уровень) -> program.php (средний уровень) -> class.php (средний уровень) -> SQL-вызов или SP (db-уровень)

OOP В настоящее время с DotNet:

ajax.html (клиентский уровень) -> program.aspx.vb (средний уровень) -> class.cls (средний уровень) -> SQL-вызов или SP (уровень db)

Мое реальное решение: Сделайте OOA, не ООП.

Итак, у меня есть один файл в таблице – как класс – с их правильными вызовами ajax, так и с помощью соответствующего вызова ajax с параметром POST (т.е. режим).

/ * 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); }; ?> . <? 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); }; ?> 

Можете ли вы упомянуть, какие из них вы используете в любой Framework? Вы правильно, но я хочу упомянуть здесь две вещи. Сначала попробуйте URL-адрес в браузере и проверьте правильность его работы. Во-вторых, не используйте return, in * success: function (data) * данные будут содержать только вывод. поэтому используйте Echo, а затем верните

Для чего это стоит, я использовал прокси-файл 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" }); 

Попробуйте следующее: Обновлен 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(); }); 

Обновление 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(); } ?>