在oop php中用ajax和json显示数据

时间:2012-12-11 00:48:04

标签: php ajax json

我有这样的编码,编码是一个包含函数的类

<html lang="en">
<head>
    <title>Ketidakpastian: Teorema Bayes</title>
    <link href="../bootstrap/css/bootstrap.css" rel="stylesheet">
    <link href="../bootstrap/css/jquery.ui.all.css" rel="stylesheet">
    <style type="text/css">
        body { 
            padding: 10 200 10 200;
        }
    </style>
    <script type="text/javascript" src="../bootstrap/js/jquery-1.8.2.js"></script>
    <script type="text/javascript" src="../bootstrap/js/bootstrap.js"></script>
    <script type="text/javascript" src="../bootstrap/js/bootstrap.min.js"></script>
    <script>
        $(document).ready(function() {
            $(".tooltipnya").tooltip({
                trigger: 'hover',
                placement: 'right'
            });
        });

        $(function(){
            $("#form-hitung").submit(function(){
                $.ajax({
                    url:"teorema-bayes.php",
                    dataType: "json",
                    success: function(data){
                        cacar = "<ol>";
                        $.each(data, function(i,n){
                            cacar = cacar + "<li>"+n["pesan"]+" : "+n["hasil"]+"</li>";
                        });
                        cacar = cacar + "</ol>";
                        $(".result-cacar").append(cacar);
                    }
                });
                return false;
            });
        });
    </script>
</head>
<body>
    <?php

    class TeoremaBayes {

        private $cacar;
        private $bintik2Cacar;
        private $bintik2TidakCacar;

        public function __construct($cacar, $bintik2Cacar, $bintik2TidakCacar) {
            $this->cacar = $cacar;
            $this->bintik2Cacar = $bintik2Cacar;
            $this->bintik2TidakCacar = $bintik2TidakCacar;
        }

        public function setCacar($probCacar) {
            $this->cacar = $probCacar;
        }

        public function getCacar() {
            return $this->cacar;
        }

        public function setBintik2Cacar($probBintik2Cacar) {
            $this->bintik2Cacar = $probBintik2Cacar;
        }

        public function getBintik2Cacar() {
            return $this->bintik2Cacar;
        }

        public function setBintik2TidakCacar($probBintik2TidakCacar) {
            $this->bintik2TidakCacar = $probBintik2TidakCacar;
        }

        public function getBintik2TidakCacar() {
            return $this->bintik2TidakCacar;
        }

        //menghitung probabilitas tidak terkena cacar
        public function notCacar() {
            return $notCacar = 1 - $this->getCacar();
        }

        //menghitung prob. bintik2cacar kali prob. cacar
        public function hitungBintik2Cacar() {
            return $this->getBintik2Cacar() * $this->getCacar();
        }

        //menghitung prob. bintik2 tidak cacar kali prob. tidak cacar
        public function hitungBintik2TidakCacar() {
            return $this->getBintik2TidakCacar() * $this->notCacar();
        }

        //menghitung prob. terkena cacar
        public function terkenaCacar() {
            return round($this->hitungBintik2Cacar() / ($this->hitungBintik2Cacar() + $this->hitungBintik2TidakCacar()), 2);
        }

        //menghitung prob. tidak terkena cacar
        public function tidakTerkenaCacar() {
            return round($this->hitungBintik2TidakCacar() / ($this->hitungBintik2TidakCacar() + $this->hitungBintik2Cacar()), 2);
        }

        public function inputUser() {
            ?>
            <h3>Ketidakpastian: Teorema Bayes</h3>
            <p style="font-size: 16px">Menghitung Probabilitas seseorang terkena penyakit cacar atau tidak</p>
            <form action="" method="post" id="form-hitung">

                <table class="table" style="font-size: 16px;">
                    <tr>
                        <td>Probabilitas cacar</td>
                        <td><input type="text" name="probCacar" class="tooltipnya" style="height: 30px; width: 50px; text-align: right;" rel="tooltip" title="Masukkan peluang, misal 0.3"/></td>
                    </tr>
                    <tr>
                        <td>Probabilitas munculnya bintik-bintik diwajah maka cacar</td>
                        <td><input type="text" name="probBintik2Cacar" class="tooltipnya" style="height: 30px; width: 50px; text-align: right;" rel="tooltip" title="Masukkan peluang, misal 0.3"/></td>
                    </tr>
                    <tr>
                        <td>Probabilitas munculnya bintik-bintik diwajah maka tidak cacar</td>
                        <td><input type="text" name="probBintik2TidakCacar" class="tooltipnya" style="height: 30px; width: 50px; text-align: right;" rel="tooltip" title="Masukkan peluang, misal 0.3"/></td>
                    </tr>
                    <tr>
                        <td><input class="btn btn-primary" type="submit" value="Submit"/></td>
                        <td></td>
                    </tr>
                </table>

            </form>
            <?php
        }

        public function dataJson() {
            $data1 = array("pesan" => "Probabilitas tidak terkena cacar", "hasil" => $this->notCacar());
            $data2 = array("pesan" => "Probabilitas terkena cacar jika ada bintik-bintik merah diwajah", "hasil" => $this->terkenaCacar());
            $data3 = array("pesan" => "Probabilitas tidak terkena cacar jika ada bintik-bintik merah diwajah", "hasil" => $this->tidakTerkenaCacar());
            $gabungData = array($data1, $data2, $data3);
        }

        public function tampilHasil() {
            ?>
            <div class="result-cacar">

            </div>
            <?php
        }

    }
    ?>
</body>

然后我创建一个对象来调用已经创建的类的函数

<?php

require_once 'teorema-bayes.php';
$cacar = new TeoremaBayes($_POST['probCacar'], $_POST['probBintik2Cacar'],          $_POST['probBintik2TidakCacar']);
$cacar->inputUser();
echo json_decode($cacar->dataJson());
$cacar->tampilHasil();
?>

但要调用数据的结果不行,他的ajax和json有什么问题吗?

请帮帮我

3 个答案:

答案 0 :(得分:0)

echo json_decode($cacar->dataJson());

不应该是json_encode:

echo json_encode($cacar->dataJson());

如果我正确地阅读你的例子应该是它。虽然我不知道这是做什么的:

$cacar->tampilHasil();

编辑:

噢......我现在明白了。在您的回复方法中删除$cacar->tampilHasil();。因为它所做的只是输出一些空div。这会弄乱你的json结果。

...等等......你在$cacar->inputUser();回复一个表格?你有很多清理工作要做。这件事情很乱。

基本的想法是,你期待json数据作为结果,并且你正在提供与它混合的各种html。你的结果方法应该只返回一个json编码的数组。没有更多或它会失败。

答案 1 :(得分:0)

如果您正在尝试在AJAX调用中阅读JSON,则需要使用

实际输出JSON
echo json_encode($cacar->dataJson());

然后,您需要从输出中删除$cacar->tampilHasil(),因为它不是有效的JSON。

答案 2 :(得分:0)

首先,您没有看到数据(我认为您想说的是)的原因是您正在尝试将尚未提交的$ _POST数据传递给Class的构造函数。除非用户提交它们,否则这些$ _POST数组变量将不会出现,并且看起来你有一个HTML表单,你当前混淆了你的inputUser()方法,该方法在构造函数之后调用(自然地)。

此外,这不是一个好的OOP。你似乎有一个在线阅读,然后开始打字。您需要将您尝试做的事情的类逻辑与来自显示逻辑的数据(即HTML和HTML生成)分开。首先看一些PHP框架或只是一般的OOP指导。