如何从jquery php调用类函数?

时间:2013-06-28 02:52:00

标签: php jquery

我正在使用插件ParamQuery网格和数据源需要获取json数据, 这就是我想用$做什么的。 getJson(...){},但我有一个名为data.php的PHP类,其中包含 一个名为GetData的方法,其他InsertData,DeleteData,(CRUD-using PDO),GetData将infromacion作为json返回。 问题是如何从jquery 调用函数?

我使用的代码是:

data.php

   <?php
   class Data {
   private $db = NULL;
   const DB_SERVER = "localhost";
   const DB_USER = "root";
   const DB_PASSWORD = "usbw";
   const DB_NAME = "musicstore";

   public function __construct() {
    $dsn = 'mysql:dbname=' . self::DB_NAME . ';host=' . self::DB_SERVER;
    try {
        $this->db = new PDO($dsn, self::DB_USER, self::DB_PASSWORD);
    } catch (PDOException $e) {
        throw new Exception('Connection failed: ' . $e->getMessage());
    }
    return $this->db;
   }

    public function getData() {

    $statement = $this->db->prepare("Select * from Customer");
    $statement->execute();

    if ($statement->rowCount() > 0) {
        echo json_encode($statement);
    }

    return false;
     }
   }
 ?>

functionjquery.js

    $.getJSON('Data.php', function(data) {
var obj = {};
obj.width = 1000;
obj.height = 400;
obj.colModel = [{title: "Rank", width: 150, dataType: "integer"},
    {title: "Company", width: 200, dataType: "string"},
    {title: "Revenues ($ millions)", width: 200, dataType: "float", align: "right"},
    {title: "Profits ($ millions)", width: 200, dataType: "float", align: "right"}];
obj.dataModel = {data: data};
$("#grid_array").pqGrid(obj);

});

2 个答案:

答案 0 :(得分:2)

您需要创建一个构建Data类实例的页面,然后输出getData()的结果

尽管如此,你不应该echo来自函数内部。将您的getData方法更改为以下内容:

public function getData() {
    $statement = $this->db->prepare("Select * from Customer");
    $statement->execute();
    return $statement->rowcount() > 0 ? $statement->fetchAll() : NULL;
}

然后,为了透明起见,创建一个新页面让我们称之为json_data.php

require_once "data.php";
$dataObj = new Data();
echo json_encode($dataObj->getData());

现在更改jQuery中的$.getJSON调用以请求json_data.php页面。

$.getJSON('json_data.php', function(data) { ... });

这应该有用。

答案 1 :(得分:1)

实际上,您可以将参数data$.getJSON请求一起传递,以确定要执行的方法。

对于例如。

functionjquery.js

中的

$.getJSON('data.php', { method:'get' }, function(data) { ... });
data.php

中的

将其更改为@Jason声明的最佳做法,并在其中

if(isset($_GET['method'])){
    switch (($_GET['method'])) {
        case 'get':
            echo json_encode(getData());
            exit();

        //other cases go here

        default:
            break;
    }        
}

这样就不需要为每个方法创建额外的页面了