Diskuze: Jquery ajax + php MVC

PHP PHP Jquery ajax + php MVC American English version English version

Avatar
Marek Šafránek:

Zkouším na základě zdejšího tutoriálu OOP redakční systém, připojit do akcí ajax, jde o jednoduchou stránku, která obsahuje registrační pole, které se pomocí nasledujícího JS kodu odešle přes index.php, následně router vyvolá AjaxKontroler, který pomocí své metody registruj() uloží záznam do databáze.

$("#dokoncitregistraci").click(function () {
                var email = $("#emailreg").val();

                var heslo = $("#hesloreg").val();
                var hesloznovu = $("#hesloznovureg").val();
                var jmeno = $("#jmenoreg").val();
                var prijmeni = $("#prijmenireg").val();
                var telefon = $("#telefonreg").val();
                var ulice = $("#ulicereg").val();
                var mesto = $("#mestoreg").val();
                var psc = $("#pscreg").val();
                var captcha = $("#captcha").val();

                console.log("jedu");
                $.ajax({
                        type: "POST",
                        url: "../ajax/registrovat/",
                        data: {
                        "email" : email,
                        "heslo": heslo,
                        "hesloznovu" : hesloznovu,
                        "jmeno" :jmeno ,
                        "prijmeni":prijmeni,
                        "telefon":telefon,
                        "ulice":ulice,
                        "mesto" :mesto,
                        "psc" : psc,
                        "captcha" :captcha
                        },

                        dataType: "json",
                        success: function(data){

                                console.log(data);

                                $("#registrace").html("Registrace proběhla úspěšně!<br>Potvrďte registraci klepnutím na odkaz v aktivačním emailu.");
                                 setTimeout(function(){ $("#registrace").delay( 6800 ).hide();
                                        $("#zatmeni").delay( 6800 ).hide(); }, 3000);

                                },
                        error: function (jqXHR) {
                alert("error" + jqXHR);
    },

V databázi se objeví příslušný záznam, a očekávám, že funkce registruj():

public function registrovat()
    {


                if ($_POST)
                {
                        try
                        {

                                $spravceUzivatelu = new SpravceUzivatelu();
                                $spravceUzivatelu->registruj($_POST['email'],$_POST['heslo'],$_POST['hesloZnovu'],$_POST['jmeno'],$_POST['prijmeni'],$_POST['telefon'],$_POST['ulice'],$_POST['mesto'],$_POST['psc'],$_POST['captcha']);

                        }
                        catch (ChybaUzivatele $chyba)
                        {

                        }

                        $id = Db::getLastId();
                                        $navraceno = array('id'=> $id ,
                                                'email'=> $_POST['email'] ,
                                                'jmeno'=> $_POST['jmeno'],
                                                'prijmeni'=> $_POST['prijmeni'],
                                                'telefon'=> $_POST['telefon'],
                                                'ulice'=> $_POST['ulice'],
                                                'mesto'=> $_POST['mesto'],

                                                'psc'=> $_POST['psc']);

                $navratjson = json_encode($navraceno);
                return $navratjson;
                exit();
                }



    }

vrátí do ajaxového kódu JSON s hodnotami......jako SUCCESS.
Ale pokud zadám dateType: 'json', vybíhá pouze error, a pokud dateType odstraním, proběhne SUCCESS ale vypíše komplet HTML kod šablony která se volá na index.php.....

Nějaký nápad jak správně navést příslušný json do JavaScriptu? Jestli MVC nemá nějaká specifika, vracení hodnot?

Odpovědět 8. února 14:25
Stojí-li něco za námahu, je třeba to udělat pořádně...
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Marek Šafránek
patrik.valkovic:

Ty ten JSON neposíláš, ale navracíš. Místo return použij klasicky echo ;) Pomocí return vrátíš hodnotu programu, který tvůj script volal, takže pravděpodobně Apache.
Aspoň tak by to bylo v čistém PHP, nevím jak je konkrétně ten MVC framework postaven.

Editováno 8. února 14:33
Nahoru Odpovědět 8. února 14:32
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na patrik.valkovic
Marek Šafránek:

zkusil sem změnit return na echo, ale stále probíhá kod error

těch nekolik funkcí co tam chci by měl zajistit AjaxKontroler, pomocí volání jeho metod v ajax url
index.php

...
$smerovac = new SmerovacKontroler();
$smerovac->zpracuj(array($_SERVER['REQUEST_URI']));
...

SmerovacKontroler

...
 public function zpracuj($parametry)
    {
                $naparsovanaURL = $this->parsujURL($parametry[0]);

                if (!empty($naparsovanaURL[0]) && !empty($naparsovanaURL[1]) )
                {
                $this->kontroler = new AjaxKontroler;

                $metodaKontroleru = $naparsovanaURL[1];
                // Volání controlleru
        $this->kontroler->$metodaKontroleru();
                }

    }
...
Nahoru Odpovědět 8. února 14:40
Stojí-li něco za námahu, je třeba to udělat pořádně...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.