2013-06-28 3 views
1

Я работаю с сеткой ParamQuery плагина и источнику данных, чтобы получить данные json, это то, что я хочу делать с $. getJson (...) {}, но у меня есть класс PHP, называемый data.php, который содержит метод GetData, другой InsertData, DeleteData (CRUD-using PDO), GetData возвращает infromacion как json. Проблема в том, как вызвать функцию из jquery?Как вызвать функцию класса из jquery php?

код, который я использую:

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

Вы должны создать страницу, которая строит экземпляр Data класса, а затем выводит результаты getData()

Yo u не должно быть 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) { ... }); 

И это должно сработать.

+0

Привет! Этот вариант немного длинный, но работает хорошо! – MauricioHz

+0

Но мы можем создать экземпляр класса непосредственно в файле 'data.php'? – Learning

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

В этом случае нет необходимости создавать дополнительные страницы для каждого метода

+0

доказывает, как я работаю, но предлагаемая инструкция помещается в заголовок файла data.php ?? – MauricioHz