2015-07-27 18 views
5

Zrobiłem stronę, która pokazuje dynamicznie stworzony HTML używając ajaxa z jQuery.

Na jednej części pokazuje różne wpisy z tabeli bazy danych, aw każdym rzędzie znajduje się przycisk do usunięcia danego wpisu z bazy danych. Jest to kod, który powinien uczynić to się stało:

$('body').on('click', '.deleteWaitlist', function(){ 
     console.log("Clicked on .deleteWaitlist name = " + $(this).attr('name')); 

     // Get the varible name to send to your php 
     var i = $(this).attr('name'); 
     console.log("$(this).attr('name') = i"); 

     $.post({ 
      url: "deleteWaitlist.php", 
      data: { id : i}, 
      success: function(result){ 
       console.log("Ajax success " + result); 
      }, 
      //dataType: "html" 
     }); 
     return false; 
    }); 

Jednak po kliknięciu przycisku pojawia się błąd

POST localhost:8888/workplace/site/[object%20Object] 404 (Not Found) 

mnie poprawić, jeśli się mylę, ale [object% 20Object] jest co otrzymujemy z nieokreślonej metody toSting(), prawda? Próbowałem określać różne rodzaje typów danych, ale nie czyniłem różnicy.

Nie mogę znaleźć problemu, czy dataType może być czymś innym niż xml, json, script lub html? Ta funkcja nie zwraca niczego, więc dataType nie jest nawet potrzebna, prawda?

To deleteWaitlist.php:

<?php 
    include("con.php");  
    $sql = "DELETE FROM waitlist WHERE id=" . $_POST[id] . ""; 
    mysqli_query($c,$sql); 
?> 

EDIT: Do wyjaśnienia, wspomniany błąd pokazuje tylko na konsoli, ponieważ chcę witryny asynchronicznej większość przycisków zapobiec nawigację. Na rzeczywistej stronie kliknięcie przycisku nie daje żadnego efektu. Ponadto, jest to kod, który tworzy przyciski:

while ($places = mysqli_fetch_array($result)) { 
    echo "<tr>"; 
    echo "<td>". $places ['ID']."</td>"; 
    echo "<td>". $places ['NAME']."</td>"; 
    echo "<td>". $places ['CHAIRS']."</td>"; 
    echo "<td>". $places ['CREATED']."</td>"; 
    echo '<td> 
     <button class="btn btn-default deleteWaitlist" type="submit" name="' . $places['ID'] . '">X</button> 
     </td>'; 
    echo "</tr>"; 
} 
+0

Jak wygląda kod HTML przycisku i wokół niego? Ten adres URL nawet nie pasuje do twojego adresu URL 'deleteWaitlist.php' w wywołaniu AJAX, więc wątpię, że jest on bezpośrednio związany z kodem, który pokazałeś do tej pory. – Phil

+1

Jako szybki test, spróbuj' return false' w obsłudze kliknięcia, aby zapobiec domyślne zdarzenie i zatrzymanie propagacji. Umieścić go tuż po swoim '$ .post ({...});' – Phil

+0

Również przygotowane oświadczenia są twoim przyjacielem. '$ stmt = $ c-> prepare ('USUŃ Z listy oczekującej WHERE id =?'); $ stmt-> bind_param ('i', $ _POST ['id']); $ stmt-> execute(); ' – Phil

Odpowiedz

5

$ .post spodziewa pierwszemu PARAM ciąg URL Jeśli chcesz przekazać obiekt z innych opcji, należy użyć $ .ajax.

Spróbuj

$.ajax({ 
      type: "POST", 
      url: "deleteWaitlist.php", 
      data: { id : i}, 
      success: function(result){ 
       console.log("Ajax success " + result); 
      } 
     }); 

Popraw mnie jeśli się mylę, ale [object% 20Object] jest to, co otrzymujemy od nieokreślonej toSting() metoda prawo?

Masz rację. Kiedy użyjesz $ .post z pierwszym parametrem jako obiektem jQuery uważa go za adres URL postu i robi toString() temu parametrowi. W twoim przypadku jest to podobne do object.toString(), które zgłasza błąd: [object%20Object]

+0

Dzięki, to zadziałało! Więc czy mogę użyć .post(), jeśli serializuję wejście? Jestem całkiem nowy w tym wszystkim async hocus pocus – TianRB

+0

Możesz podać dane wejściowe w formacie jQuery.post (url [, data] [, success] [, dataType]) Sprawdź dokument tutaj http://api.jquery.com Parametr /jquery.post/data może być serializowany lub może być podany jako obiekt, taki jak {nazwa: "John", wiek: 15} – kiranvj

+0

@TianRB zauważ, że w jQuery 3.0+ możesz użyć obiektu * options * w '$. post " – Phil