ugrás a tartalomhoz

Javascript sor törlés nem működik ( .parent().remove() )

Theo76 · 2016. Ápr. 28. (Cs), 17.13
Sziasztok!

Elkezdtem egy példa alapján csinálni saját MVC-t, és egyben tanulni az objektum orientált programozást. Az egyik javascriptnél elakadtam.

A linkje: http://jream.com/lab

Ahol elakadtam az a 4-dik résznél a javascript törlés.
  1. $( '.del' ).on( 'click', function() {  
  2.     delItem = $( this );  
  3.     var id = $( this ).attr'rel' );  
  4.     var data = {'id': id};  
  5.   
  6.     $.post( 'dashboard/xhrDeleteListing', data, function( o ) {  
  7.         delItem.parent().remove();  
  8.     }, 'json');  
  9.   
  10.     return false;  
  11. });   
  12. json' );  
A delItem.parent().remove(); parancs ami törölné az adott sort, nem akar működni. Nekem 2.2.3 jquery-m van.
 
1

.fail

Pepita · 2016. Ápr. 28. (Cs), 18.24
Szia, írd meg hozzá a .fail ágat is, mert sanszos, hogy szerver oldali hiba van.
https://api.jquery.com/jquery.post/

Vagy - szerintem jobb - a "hagyományos" jQuery.ajax() kezel error eseményt. Ide akkor futsz, ha szerver oldalról nem, vagy rossz válasz jön. (Pl esetedben ha van vmi PHP error, ez "kiíródik képernyőre", akkor máris nem json a válasz.)

A 6-7. sor közé szúrj be egy ilyet:
  1. console.log('success');  
, és ha megcsináltad az error ágat, akkor oda is hasonlót.

+ Ha van visszaadott adat (o), akkor azt is illik ellenőrizni.

Ezeken kívül böngészőben nézd meg a forgalmat, ez a kérés milyen státuszt, stb. kapott, mi jött vissza.
2

igen... a visszaadott érték

Theo76 · 2016. Ápr. 28. (Cs), 19.44
igen... a visszaadott érték nem json... találtam egy hibakezelő scriptet, ami ezt adta vissza: "nParsing JSON Request failed".
  1. $().ready(function(){  
  2.     $.ajaxSetup({  
  3.         error:function(x,e){  
  4.             if(x.status==0){  
  5.             alert('You are offline!!n Please Check Your Network.');  
  6.             }else if(x.status==404){  
  7.             alert('Requested URL not found.');  
  8.             }else if(x.status==500){  
  9.             alert('Internel Server Error.');  
  10.             }else if(e=='parsererror'){  
  11.             alert('Error.nParsing JSON Request failed.');  
  12.             }else if(e=='timeout'){  
  13.             alert('Request Time out.');  
  14.             }else {  
  15.             alert('Unknow Error.n'+x.responseText);  
  16.             }  
  17.         }  
  18.     });  
  19. });  
  20.   
  21. $(function() {  
  22.     $.get( 'dashboard/xhrGetListings', function( o ) {  
  23.         for (var i = 0; i < o.length; i++) {  
  24.             $( '#listInserts' ).append( '<div>' + o[i].text + '<a class="del" rel="' + o[i].ID + '" href="#">X</a></div>' );  
  25.         }  
  26.   
  27.             $( '.del' ).on( 'click', function() {  
  28.                 delItem = $( this );  
  29.                 var id = $( this ).attr'rel' );  
  30.                 var data = {'id': id};  
  31.   
  32.                 $.post( 'dashboard/xhrDeleteListing', data, function( o ) {  
  33.                     delItem.parent().remove();  
  34.                 }, 'json')  
  35.   
  36.                 .done(function() {  
  37.                     alert( "second success" );  
  38.                 })  
  39.                 .fail(function() {  
  40.                     alert( "error" );  
  41.                     console.log( JSON.stringify(data) );  
  42.                 });  
  43.                 return false;  
  44.             });   
  45.         }, 'json' );  
  46.   
  47.     $( '#randomInsert' ).submit( function(){  
  48.         var url = $( this ).attr'action' );  
  49.         var data = $( this ).serialize();  
  50.   
  51.         $.post( url, data, function( o ) {  
  52.             $( '#listInserts' ).append( '<div>' + o.text + '<a class="del" rel="' + o.id + '" href="#">X</a></div>' );  
  53.         }, 'json' );  
  54.   
  55.         return false;   
  56.    });  
  57. });  
a JSON.stringify(data) {"id": "2"}-t ad vissza.

A chromeban megnéztem a visszakapott php kérést, az xhrDeleteListing 200-as státusszal tért vissza, vagyis ott nincs gond...
3

Megnéztem az .fail()-nál a

Theo76 · 2016. Ápr. 28. (Cs), 20.29
Megnéztem az .fail()-nál a console.log() kiírásokat:

JSON.stringify( data ): {"ID":"1"}

JSON.stringify( delItem ): {"0":{"jQuery223066169610433678681":{"events":{"click":[{"type":"click","origType":"click","guid":2,"namespace":""}]}}},"context":{"jQuery223066169610433678681":{"events":{"click":[{"type":"click","origType":"click","guid":2,"namespace":""}]}}},"length":1}

JSON.stringify( delItem ): [{"0":"1","1":"vv","ID":"1","text":"vv"},{"0":"2","1":"dsadasd","ID":"2","text":"dsadasd"},{"0":"3","1":"dsadasd","ID":"3","text":"dsadasd"},{"0":"4","1":"fsdfsdf","ID":"4","text":"fsdfsdf"},{"0":"5","1":"proba","ID":"5","text":"proba"},{"0":"6","1":"pr","ID":"6","text":"pr"}]
4

hiba kezelés

Pepita · 2016. Ápr. 29. (P), 07.28
Írd meg te a kezelés, .ajax, error ág, success ben adat kiírás a. Az a biztos.
5

Sikerült megoldani... Átírtam

Theo76 · 2016. Ápr. 29. (P), 07.34
Sikerült megoldani...
Átírtam erre a kódot:
  1.             $.ajax({  
  2.                 type: 'POST',  
  3.                 url: 'dashboard/xhrDeleteListing',  
  4.                 data: {'ID': id},  
  5. //                dataType: 'json',  
  6.   
  7.                 success: function( data ) {  
  8.                    delItem.parent().remove();  
  9.                 },  
  10.   
  11.                 error: function( jqXHR, textStatus, errorThrown ) {  
  12.                     console.log(jqXHR);  
  13.                     alert("jqXHR: " + jqXHR.status + "\ntextStatus: " + textStatus + "\nerrorThrown: " + errorThrown);  
  14.                 }  
  15.             });  
Valamiért a data-ra json hibát dobott ki (unexpected end of json input). Átírtam a kódot ajaxra, majd kivettem a dataType: 'json' sort, és egyből működött. Bár az eredeti problémát nem tudom igazából mi okozta...
6

dataType

Pepita · 2016. Ápr. 29. (P), 07.53
Ez a vissza kapott adatra vonatkozik. Tehát mégis csak az a baj, hogy a szerver nem ad vissza json-t. :)
PHP oldalról ilyesmit kell:
  1. $data=array ();  
  2. echo (json_encode ($data));  
  3. exit;  
Persze a data tömbbe azt raksz, amit gondolsz.
A lényeg a json_encode.
Ha vmi hiba van PHP oldalon, és be van kapcsolva display errors, akkor megint nem json lesz, mert ki megy egy html. Ez gyakori hiba.
Küldj ki vmi adatot, pl $data['status'] = 1, ezt külön tudod ellenőrizni JS success ágon: data.status == 1.
Ekkor azt is tudod, hogy json jött, és ok minden. Ha pl status == 0, ezzel a szerverről tudsz üzenni, hogy program hiba nincs, de vmi miatt sikertelen a feldolgozás. + lehet mellé hiba üzenet, stb, amit csak fantáziád alkot.
7

igen a php-re én is

Theo76 · 2016. Ápr. 29. (P), 09.09
igen a php-re én is gyanakodtam... de az első betöltéskor megvan a json_encode:
  1. function xhrGetListings() {  
  2.     $sth = $this->db->prepare( "SELECT * FROM data" );  
  3.     $sth->execute();  
  4.     $data =  $sth->fetchAll();  
  5.     echo json_encode( $data );  
  6. }  
ezután a listázást javascript végzi:
  1. $(function() {  
  2.     $.get( 'dashboard/xhrGetListings', function( o ) {  
  3.         for (var i = 0; i < o.length; i++) {  
  4.             $( '#listInserts' ).append( '<div>' + o[i].text + '<a class="del" rel="' + o[i].ID + '" href="#">X</a></div>' );  
  5.         }  
  6.   
  7.         $( '.del' ).on( 'click', function() {  
  8.             delItem = $( this );  
  9.             var id = $( this ).attr'rel' );  
  10.   
  11.             $.ajax({  
  12.                 type: 'POST',  
  13.                 url: 'dashboard/xhrDeleteListing',  
  14.                 data: {'ID': id},  
  15.   
  16.                 success: function( data ) {  
  17.                    delItem.parent().remove();  
  18.                 },  
  19.   
  20.                 error: function( jqXHR, textStatus, errorThrown ) {  
  21.                     console.log(jqXHR);  
  22.                     alert("jqXHR: " + jqXHR.status + "\ntextStatus: " + textStatus + "\nerrorThrown: " + errorThrown);  
  23.                 }  
  24.             });  
  25.               
  26.             return false;  
  27.         });   
  28.     }, 'json' );  
8

Ha JSON-t írsz ki, ne

bamegakapa · 2016. Ápr. 29. (P), 10.01
Ha JSON-t írsz ki, ne felejtsd el elküldeni a megfelelő headert. Ha jól emlékszem, valamelyik verzió óta a jQuery már igényli, ha a datatype json-ra van állítva.
  1. header("Content-Type: application/json", true);  
10

Biztos?

Pepita · 2016. Ápr. 29. (P), 19.44
Nem túl rég simán küldtem enélkül, de én sem emlékszem arra a jquery verzióra.
Ha esetleg lenne erről egy linked, olvasnám. (Azzal együtt, hogy hála Istennek nincs frontend feladatom mostanában.)
11

Lehet rosszul emlékszem,

bamegakapa · 2016. Ápr. 30. (Szo), 09.31
Lehet rosszul emlékszem, utána fogok nézni. Keveset jqueryzek mostanság.

A megfelelő header ártani tuti nem árt mondjuk :).
9

Nem érted

Pepita · 2016. Ápr. 29. (P), 19.40
Eddig is az xhrDeleteListing -el volt gond, nem? Az még mindig nem látható, hogy küld-e json adatot, mert a listával foglalkozol, ami úgy tűnik műxik.
Nem tetted be a success ágba az adat kiírását sem.
Így nehéz lesz biztosan a végére járni. Legalább is én mindig tudni akarom, hogy pontosan mi volt rossz.