Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX]Okno dialog i problem z submitem
Forum PHP.pl > Forum > Przedszkole
casperii
Witam, mam kod, po kliknięciu w przycisk, wyskakuje okienko dialog, potem mam ustawione 2 butony , po kliknięciu w "zapisz" pokazuje mi , że wartość nie istnieje, tak jakby nie przesyłało forma.

Kod:

Kod
$(document).ready(function(){
    $("#OpenWindowEducation").click(function(e){
        $("#EducationWindow").dialog({
            height: 550,
            width: 640,
            left: 610,
            top:50,
            hide: "explode",
            buttons:{
                        "Zapisz": function(submit){
                            var form = $('#UpdateEducation'),
                            formData = form.serialize(),
                            formUrl = form.attr('action'),
                            formMethod = form.attr('method'),
                            responseMsg = $('#education-response');
                            responseMsg.hide().addClass('response-waiting').text('czekaj...').fadeIn(300);
                            
                            $.ajax({
                                type: formMethod,
                                url: "update.php",
                                data: formData,
                                processData: false,
                                //contentType: false,
                                success: function(data){
                                    var dataObject = jQuery.parseJSON(data);
                                    var responseData = jQuery.parseJSON(data),
                                    klass = '';
                                    
                                    switch(responseData.status){
                                        case 'error':
                                        klass = 'response-error';
                                        break;

                                        case 'success':
                                        klass = 'response-success';

                                        setTimeout(function(){
                                            $('#sugesstionForm').dialog('close');                
                                        }, 1000);
                                        break;  
                                    }

                                    responseMsg.fadeOut(200,function(){
                                        $(this).removeClass('response-waiting').addClass(klass).text(responseData.message).fadeIn(200,function(){
                                            setTimeout(function(){
                                                responseMsg.fadeOut(200,function(){
                                                    $(this).removeClass(klass);
                                                });
                                            },3000);
                                        });
                                    });
                                    console.log(data)
                                }
                            });



                                        
                            e.preventDefault();
                            //$( this ).dialog( "close" );
                        },
                        
                        "Anuluj": function(){
                            $( this ).dialog( "close" );
                        }
            },    
            
            close: function(){}
        });
        return false;
    });
});
robertpiaty
W tej linii na końcu zamiast średnika masz przecinek.
  1. var responseData = jQuery.parseJSON(data),


Przy okazji linię wcześniej tworzysz dataObject którego chyba nigdzie nie wykorzystujesz dalej w kodzie.
Comandeer
Ten przecinek tam ma być…
Rozumiem, że serwer nic nie zwraca? Coś konsola rzuca?
casperii
Cytat(robertpiaty @ 26.05.2015, 15:09:10 ) *
W tej linii na końcu zamiast średnika masz przecinek.
  1. var responseData = jQuery.parseJSON(data),


Przy okazji linię wcześniej tworzysz dataObject którego chyba nigdzie nie wykorzystujesz dalej w kodzie.


Poprawiłem, ale to nic nie dało.
Comandeer
Ej, ludzie - ale ram ten przecinek ma być! Inaczej bez niego deklaracj klass jest deklaracją zmiennej globalnej. Warto zauważyć, ze w linijce z deklaracją klass nie ma bowiem słowa kluczowego var
casperii
Cytat(Comandeer @ 26.05.2015, 15:13:02 ) *
Ej, ludzie - ale ram ten przecinek ma być! Inaczej bez niego deklaracj klass jest deklaracją zmiennej globalnej. Warto zauważyć, ze w linijce z deklaracją klass nie ma bowiem słowa kluczowego var


@Comandeer Ok, wróciłem do czasu przecinka smile.gif Ale to i tak nic nie daje. Otrzymuje po prostu wiadomość z zewnętrznego pliku, ale błędu konsola nie wywala.
robertpiaty
No tak, ale to jest js i nowa linia.
nospor
Cytat
No tak, ale to jest js i nowa linia.
No i co? To juz w js nie mozna po przecinku przeniesc do oddzielnej linii? Mozzna.
Ale to nie ma znaczenia czy jest , czy ; bo to nie w tym problem.

Casperi: odpal sobie konsole firebug i patrz co idzie ajaxem, co masz na zwrocie i wszystko bedzie jasne
robertpiaty
Mea culpa - racja - coś mnie przyćmiło, przecież tak się też obiekty tworzy.
  1. var a = {
  2. a:1,
  3. b:5
  4. }
casperii
Problem rozwiązany, okazało się , że miałem 2 x form o tym ID :-) Zapomniałem ten wcześniejszy po prostu usunąć.
Comandeer
No to sprawdź co przychodzi do skryptu
casperii
Cytat(Comandeer @ 26.05.2015, 15:41:29 ) *
No to sprawdź co przychodzi do skryptu


@Comandeer a jak zrobić żeby kasowało wartości w inputach po wysłaniu forma z okna dialog.
Bo teraz jest tak , wypełniam form, wysyłam, zamyka mi dialog , kliknę sobie ponownie i okazuje się , że w formie są te same wartości.
Comandeer
Kasowanie to coś w deseń
Kod
$(elem).val('');
casperii
Cytat(Comandeer @ 26.05.2015, 15:59:16 ) *
Kasowanie to coś w deseń
Kod
$(elem).val('');


A co jeśli mam 50 inputów to co mam wykonać 50 x element value ?

$('input[name="nazwa_szkoly"]').val('');
Comandeer
To można skorzystać np z fsktu, że mają wspólnego rodzics
Kod
$(' div input').val('');
robertpiaty
Lub nadać im wspólną klasę i wtedy tak
  1. $('input.klasa').val('');
casperii
Jeszcze takie pytanie z innej beczki, ponieważ z okna dialog zapisuje dane do bazy. Wpadłem teraz na pomysł , by móc te dane updatować także za pomoc okienka dialog. Czyli wyświetlam pętlą while wszystkie wyniki, następnie klikam w edytuj i otwieram okienko dialog już z wypełnionymi inputami.

Jak teraz coś takiego zrobić?
robertpiaty
Jest takie rozszerzenie jak jQgrid. Może Ci się przydać - zobacz przykład ten http://www.guriddo.net/demo/guriddojs/edit...rols/index.html (zaznacz wiersz w tabeli) lub ten http://www.guriddo.net/demo/guriddojs/edit...logs/index.html (zaznacz wiersz tabeli i kliknij na ikonę ołówka w lewym dolnym rogu tabeli)
casperii
Wolałbym unikać gotowców, poza tym ten musiałbym przerabiać i dopasowywać, a to więcej czasu by mi zajęło niż wymyślenie jak zrobić to na modal dialog.
Wydaje mi się, że każdemu elementowi wystarczy nadać ID z ID z bazy. Następnie może poprzez GET? wczytywać do otwartego okienka?
Jeżeli się mylę, to niech ktoś mnie wyprowadzi z błędu.
Comandeer
Łatwo wykryć co kliknąłeś, więc łatwo też dostać się do wartości z konkretnego wiersza wyświetlanego wyniku
casperii
Cytat(Comandeer @ 26.05.2015, 23:45:12 ) *
Łatwo wykryć co kliknąłeś, więc łatwo też dostać się do wartości z konkretnego wiersza wyświetlanego wyniku



@Comandeer:

Mam w pętli taki kod:

  1. <div id="OpenWindowEditEducation" data-id="<?=$rowEdu['id']; ?>">klik</div>


Ale mi tylko otwiera dialoga z pierwszego wyniku.
Comandeer
Jeśli masz kilka elementów z tym samym [id] to de facto nigdy nie będzie działać poprawnie
casperii
Kurcze to masz może jakieś złoty środek ?
Comandeer
Jak coś klikniesz to masz to w this - to raz. Dwa - jeśli trzeba obsługiwać kilka elementów, to lepszym pomysłem jest klasa.
casperii
@Comandeer Wpadłem na pomysł by zrobić przycisk <button> i to mi działa, każdy button ma unikalny data-client-uid="<?=$rowEdu['id'];?>
Po otworzeniu dialogu wczytuje ten ID.
Teraz zastanawiam się czy po prostu takie dane przechwytywać poprzez data-cos, data-cos2, data-cos3 itd i to później wstawiać do inputów w modal dialog , czy bawić się w odpytywanie jsonem do bazy i odbieranie tych danych i dopiero wstawienie do inputa questionmark.gif
robertpiaty
Sprawdź co masz w zmiennej $costamcos. Jeśli robisz formularz to nie powinieneś ślepo wierzyć użytkownikowi że wprowadza wszystkie dane ok. Przydał by się jakiś walidator na formularzu i obsługa błędu zapisu do bazy.
casperii
Dobra problem rozwiązany.
Miałem form , czyli zmieniało mi wszystkie formy na ID UpdateEducation, a musiałem zaznaczyć o który form mi chodzi.


Jeszcze mam jeden problem i nie wiem jak go ugryźć:

Mam kod:
Kod
jQuery.fn.delete_school = function (id) {
    var that = $(this);
    that.hide(1, function () {
        that.parent().append('<div class="usun">Usuń</div><br>');
        that.parent().append('<div class="stop">Anuluj</div>');

$('.usun').live('click', function () {
                $.post("ajax.php", {
                    remove: id
                }, function (data) {
                    if (data.status == 'done') {
                       // that.parents('.education_table').remove();
                      
                    } else {
                        $('.stop').click();
                    }
                }, 'json');
});
    });
    $('.stop').live('click', function () {
        var parent = $(this).parent();
         var that = $(this);
        parent.prev().show(1, function () {
            //
            that.parent('#delTab').append('<div class="education_table" id="delTab" style="float:left; text-align:center; width:70px; margin:1px;  padding-top:20px;">aaaaacos</div>');
            parent.remove();
            that.parent('education_table').append('<div>blablabla</div>');
        });
        return false;
    });
};


  1. <div class="education_table" id="delTab" style="float:left; text-align:center; width:70px; margin:1px; padding-top:20px;"><img src="/images/profile/ico_trash.png" onclick="$(this).delete_school(<?=$row['id'];?>); return false;"></div>


I teraz tak po kliknięciu w ikonkę kosza (trash) - w to miejsce pojawia mi się Usuń / Anuluj.
Do tej pory jest ok. Ale teraz jeżeli kliknę anuluj chciałbym by powróciło do kosza.
Ma ktoś jakiś pomysł ? Może ty @Comandeer ?

jakieś pomysły ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.