1

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

我使用的代码是:

数据.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;
     }
   }
 ?>

函数jquery.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);

});
4

2 回答 2

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

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

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

这应该有效。

于 2013-06-28T02:59:33.533 回答
1

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

例如。

函数jquery.js

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

数据.php

按照@Jason 的说明更改它以获得最佳实践,并在此范围内

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

        //other cases go here

        default:
            break;
    }        
}

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

于 2013-06-28T05:47:16.480 回答