0

私はこのようなコーディングをしています、コーディングは関数を含むクラスです

<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 に何か問題がありますか?

私を助けてください

4

3 に答える 3

0

まず、データが表示されない理由(これは、私が言おうとしていることです)は、クラスのコンストラクターにまだ送信されていない$_POSTデータを渡そうとしているためです。これらの$_POST配列変数は、ユーザーが送信しない限り存在しません。コンストラクターの後に呼び出されるinputUser()メソッドに現在ごちゃ混ぜになっているHTMLフォームがあるようです(当然)。

さらに、これは良いOOPではありません。オンラインで少し読んだ後、入力を開始したようです。データを使用して実行しようとしていることのクラスロジックを表示ロジック(つまり、HTMLおよびHTML生成)から分離する必要があります。まず、いくつかのPHPフレームワークまたは一般的なOOPガイダンスを確認します。

于 2012-12-11T01:07:56.937 に答える
0
echo json_decode($cacar->dataJson());

それはjson_encodeではないはずです:

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

私があなたの例を正しく読んでいれば、それはそれであるはずです。これが何をするのかわかりませんが:

$cacar->tampilHasil();

編集:

うーん...わかりました。$cacar->tampilHasil();応答メソッドで取り除きます。空のdivを出力するだけなので。それはあなたのjson結果を台無しにします。

...そして待ってください...フォームを ? でエコーアウトしてい$cacar->inputUser();ますか? ここでは、多くのクリーンアップを行う必要があります。これはめちゃくちゃです。

基本的な考え方は、結果として json データを期待していて、それに混合されたあらゆる種類の html を提供しているということです。結果メソッドは、json エンコードされた配列のみを返す必要があります。それ以上何もしないと失敗します。

于 2012-12-11T00:50:57.477 に答える
0

AJAX 呼び出しで JSON を読み取ろうとしている場合は、実際に JSON を使用して出力する必要があります。

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

$cacar->tampilHasil()次に、有効な JSON ではないため、出力からを削除する必要があります。

于 2012-12-11T00:53:25.340 に答える