Topic: jquery + json = magija

Sveiki, turiu tokį dalyką, nes jau pora valandų kaip žiūriu ir negaliu patikėt kad taip vyksta.

Esme tokia - yra ajax užklausa:

        ondblclk: function(NODE, TREE_OBJ) {
        $.post("plugins/menu/tree.php", { "action": "show", "id" : $(NODE).attr("id") },function (data) {
                                $("#url").val(data.url);
        },"json");
    }

Viskas perduodama teisingai! Su FireBug tikrinu, perduodama tai kas turi būti perduodama. Tarkim kažkas tokio:

action    show
id   1

Toliau veikia scriptas, sudaro ką reikia ir išveda resultatą:

$data = $core->db->fetch_array();
header('Content-type: application/json');
echo json_encode($data);

čia irgi gaunu duomenis tikslius. (pasitikrinu su FireBug).

Viskas lyg ir veiktų, kaip sakant veikia ant FF (kur daugiau viskas veiks jei ne ant lapės?) Bes gražiausiai tai kad Opera ir Chrome veikia tik su pirma eilute kurią bandau išgauti iš Ajax grąžinto teksto. Tarkim:

$("#url").val(data.url);

Suveikia puikiai, įveda norimą tekstą i laukelį. BET jei bandau įdėti bent viena eilute daugiau kad išvestų - užsilenkia scriptas tiek Operoj tiek Chrome. žiūrėjau Operos logus, nes Chrome ten totaliai gryba pjauna su savo "debugeriu". Taigi nurodau papildomą vieną eilutę:

$("#url").val(data.url);
alert(data.default); // Json grąžina tik 1 raidę: "Y"

Opera sako man:

alert(data.default); - Syntax error at line 47 while loading.

Chome išvis nustebino:

Uncaught SyntaxError: Unexpected token default ajax.php:126
126 eilutė: onrename : function (NODE, TREE_OBJ) {

Kur visiškai niekas nesiriša su Ajax :D

Gal kas buvot susidurę su tokia problema? Arba gal ko aš nepastebiu.

Re: jquery + json = magija

Pradžioje tikrink su IE ir FF. Aš asmeniškai web'o ant Operos ir Chrome dar net netikrinu, nes per mažai vartotojų naudoja.

Jeigu ant FF veikia, tai tikriausiai bus suderinamumo problemos pačio jQuery. Gal naudoji ne standartinius komponentus?

Re: jquery + json = magija

Geriausia yra pagaminti mini php/js scriptukus, kurių pagalba būtų galima realiai pamatyti klaidą, tada galima jau būtų ir pabandyti padebuginti, arba parodyti jQuery programeriam.

Re: jquery + json = magija

minde tame esme kad klaidos neisveda jokios man realiai. Viska ka matau yra debugeriai, o js scriptukus gaminti, cia jau aukstas pilotazas :) netgi buvau issikviets javascript vardump ir tai viska man rodo kad visi elementai egzistuoja, tik kai bandau juos isvesti gaunu error'a, o kodel - velniai zino

Re: jquery + json = magija

Tai turi vistiek galėti pagaminti veikiantį setup'ą, kuris pagamina klaidą.

O debuginti aišku, kad yra normalu, problema tikriausiai tame, kad ant Opera/Chrome nėra tokio daikto, kaip FireBug'as?

Re: jquery + json = magija

Chrome turi FireBug, bet jis nieko nerodo irgi. Jokiu klaidu :) Opera turi FragonFly ar kaip ten jis vadinas

Re: jquery + json = magija

Tai reikia ne klaidas žiūrėt, uždėti tam tikrose vietose break-point'us, ir tada trace'inti stebint (watch) kintamuosius, gal paaiškėtų, kurioje vietoje jie konkrečiai susimala.

Tiesa, kartais trace'inti jQuery aplikacijas sunku, nes pats jQuery man mėtydavo error'us, kurie labai stabdydavo visą procesą, nepavyko surasti, kur atjungti sustojimus.

8 (edited by zygis 2010-04-10 14:04:22)

Re: jquery + json = magija

blogai parašytas skriptas....
http://api.jquery.com/jQuery.post/

daromus veiksmus reikia įkišti į funkciją:

......
function(data) {
  ///o va cia jau darai ka nori;
}
......
MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: jquery + json = magija

zygis isigilink i mane pateikta scripta

ondblclk: function(NODE, TREE_OBJ) {
        $.post("plugins/menu/tree.php", { "action": "show", "id" : $(NODE).attr("id") },function (data) {
                                $("#url").val(data.url);
        }
,"json");
    }

minde tai tas operos dragonFly ir sustoja ties ta vieta kur erroras metamas ir toliau scripto nevykdo. sakau esme ta kad jei idedu nauja eilute, tarkim alert(data.default);

tuomet errora man meta: $("#url").val(data.url); - Syntax error at line 47 while loading.

Re: jquery + json = magija

Min2liz wrote:

minde tai tas operos dragonFly ir sustoja ties ta vieta kur erroras metamas ir toliau scripto nevykdo. sakau esme ta kad jei idedu nauja eilute, tarkim alert(data.default);

tuomet errora man meta: $("#url").val(data.url); - Syntax error at line 47 while loading.

O kaip atrodo tas tavo objektas su id "url"?

Re: jquery + json = magija

Visas json kuri gaunu: http://www.ipix.lt/images/81984168.png

Re: jquery + json = magija

Na aš turėjau omenyje HTML objektą.

13 (edited by zygis 2010-04-10 21:05:31)

Re: jquery + json = magija

Min2liz wrote:

zygis isigilink i mane pateikta scripta

ondblclk: function(NODE, TREE_OBJ) {
        $.post("plugins/menu/tree.php", { "action": "show", "id" : $(NODE).attr("id") },function (data) {
                                $("#url").val(data.url);
        }
,"json");
    }

minde tai tas operos dragonFly ir sustoja ties ta vieta kur erroras metamas ir toliau scripto nevykdo. sakau esme ta kad jei idedu nauja eilute, tarkim alert(data.default);

tuomet errora man meta: $("#url").val(data.url); - Syntax error at line 47 while loading.

Ai jo ten buvo horizontalus scrolas ir nesimatė būtent tos vietos :)
šiaip aš visada stengiuosi per ajax gauti tik tekstą, kurį vėliau interpretuoju kaip JSON ir pan. Ir su tokiu dalyku niekada jokių bėdų neturėjau. Taip pat reikia pažiūrėti kokį masyva encodini, nes man kažkada pristrigus išsuko uodegą toks reikalas:

//php:
echo json_encode(array('masyvas'=>$masyvas_kuri_nori_perduoti));

// javascript funkcijoje kuri apdoroja rezultatus
var obj = jQuery.parseJSON(data);
$(obj.masyvas).each(function () {
   alert(this.masyvo_elementas);
}

tas masyvo ikelimas i kitą masyvo elementą atrodo keistas, bet kitaip nepavyko priversti veikti.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: jquery + json = magija

Pasirodo viso sito tikrai nereikejo nieko daryti. Dabar turiu laaaaabai gera pamoka :)  Susitvarkiau ta klaida, teko google pakankinti su idijotiskais klausimais, bet atsakyma gavau.

Taigi, antra eilute kur as kvieciu ir kur jums minejau buvo data.default taip? Ir pataikyk tu man taip...

default yra JavaScript rezervuotas zodis, todel Chrome/Opera pjaunasi ant tos vietos ir negali suprasti ko as noriu. Pervadinau i m_default ir vuolia, eina kaip vejas :)

Taigi dekui minde ir zygis uz pagalba, gal ir patiems pravers tokia info, nes si karta as tikrai pasimokiau... :)