Autorius Tema: [ Jquery ] Json išprintinti pagal raktą ( key )  (Skaityta 4385 kartus)

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
[ Jquery ] Json išprintinti pagal raktą ( key )
« Įrašytas: 2013-08-08 13:45:50 pm »
Sveiki, taigi ajax užklausą :

$("a#messageview").click(function(){

$.ajax({
type: "POST",
cache: false,
data: {"messageid" : $(this).data('id')},
url: "modules/getmessageinfo.php",
success: function(msg){

console.log("YES");

},
error: function(error){

console.log("NO");

}
});

});

Pats php kodas :


include("../config.php");

if(isset($_POST['messageid']))
{
$result = $connection->query("SELECT * FROM `messages` WHERE `id` = '".$_POST['messageid']."'")->fetch(PDO::FETCH_ASSOC);
$array = array();
$array['Sender'] = $result['Sender'];
$array['Receiver'] = $result['Receiver'];
$array['Subject'] = $result['Header'];
$array['Content'] = $result['Text'];
$array['Date'] = $result['Date'];

echo json_encode($array);

}


Grąžinta reikšmė :
{"Sender":"Jonas Jonaitis","Receiver":"Jonas Jonaitis","Subject":"1","Content":"132132123146545465645","Date":"2013-08-06"}

Čia viskas gerai, tik dabar man reikia jį kiekvieną atskirai išprintint, kartus pvz alert(msg); viskas gerai, bet man reikia pvz alert(msg.Sender); ir man išprintintų Jonas Jonaitis ( tokiu būdu su . operatoriumi jau bandžiau ). Dėkoju už bet kokią pagalbą.

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #1 Įrašytas: 2013-08-08 15:49:13 pm »
Prie savo ajax užklausos pridėk parametrą dataType: 'json', ir galėsi kreiptis su tašku.
$.ajax({
    // .......
    dataType: 'json',
   // ....
   success: function(msg) {
       alert(msg.Sender);
   }
});

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #2 Įrašytas: 2013-08-08 16:32:02 pm »
Kai pridedu šį parametrą man praeina success callbacką ir rodo error, šitą : console.log("NO");. Gal kažkokį headerį php ir ajax'e reikia uždėt ar kažką tokio ?

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #3 Įrašytas: 2013-08-08 17:15:27 pm »
Reiškia negali sukonvertuoti į json objektą, reiškia neteisingas json'as grąžinamas. Hm, bet iš tavo papastinto pavyzdžio tai viskas gerai atrodo. Gal išveda ne tik šitą json'ą, bet dar kažką?

Manualai.lt Forumas

Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #3 Įrašytas: 2013-08-08 17:15:27 pm »

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #4 Įrašytas: 2013-08-08 17:55:55 pm »
Išveda tuos duomenis kuriuos parašiau. Kiek skaičiau tai reikia headerį json kažkokį nustatyt ar kažką tokio.

Pridedu nuotrauką :
« Paskutinį kartą keitė: 2013-08-08 18:00:13 pm sukūrė @Jonas »

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #5 Įrašytas: 2013-08-08 18:23:56 pm »
Nebūtina. Kas ten per newline'as? :) Gali dar pabandyti be dataType'o to, bet callback'e daryt:
success: function(msg) {
  msg = $.parseJSON(msg);
}
bet čia iš esmės tas pats bus. Atsikratyk to newline'o

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #6 Įrašytas: 2013-08-08 18:31:28 pm »
Kokio new lines ? Neveikia tas būdas. O header response : text/html, o requesto : application/x-www-form-urlencoded; charset=UTF-8. Čia man atrodo kažkas ne to bus, nes grąžinimas text/html formatas.

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #7 Įrašytas: 2013-08-08 18:35:59 pm »
Na pas tave grąžinamas ne
{"Sender":"Jonas Jonaitis","Receiver":"Jonas Jonaitis","Subject":"1","Content":"132132123146545465645","Date":"2013-08-06"}o
{"Sender":"Jonas Jonaitis","Receiver":"Jonas Jonaitis","Subject":"1","Content":"132132123146545465645"
,"Date":"2013-08-06"}
Tas header'is duotų tik tą, kad nereikėtų papildoma darašynėti to dataType'o arba $.parseJSON. Ar $.parseJSON meta kokias klaidas į konsolę?

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #8 Įrašytas: 2013-08-08 18:38:51 pm »
Nežinau dėl ko tas newline, o dėl to parsejson tai vietoje success jungia error callback'ą, tai negaliu pasakyti ar meta ar ne.

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #9 Įrašytas: 2013-08-08 18:45:16 pm »
Problema ir yra tame tavo newline. Atsikratyk jo ir bus gerai :) Sakiau gi, jeigu darai su parseJSON, tada nereikia dataType'o. Be dataType sakei meta į success.

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #10 Įrašytas: 2013-08-08 18:47:32 pm »
SyntaxError: JSON.parse: unexpected character va koks erroras. Nesuprantu kaip tą new line pašalint ...

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #11 Įrašytas: 2013-08-08 18:51:49 pm »
Tai va, čia tau tą ir sako, kad blogas json'as. O blogas dėl to, kad newline'as. Matyt pačiam content'e pas tave newline'as, debugink. Žiūrėk ką konkrečiai turi masyvas prieš jį json encodinant. Nors kita vertus json_encode turėtų pasirūpinti tuo. Žodžiu, ne ten klaidos ieškai :)

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #12 Įrašytas: 2013-08-08 18:56:19 pm »
Kažkodėl po 4 įterptų elementų į array atsiranda newlines.. Niekaip nesuprantu kur problema..

Neprisijungęs justinas

  • Naujokas
  • *
  • Įrašai: 164
  • Karma: +16/-3
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #13 Įrašytas: 2013-08-09 10:40:09 am »
Eikit jūs, newline'ai...

JSON.parse('{"a" : "b",\n "c" : "d"}')
Object {a: "b", c: "d"}

Nerūpi JSON'ui tas whitespace. Kaip sakė, pirma atitinkamą Content-Type headerį įsidėk (application/json). PHP nėra stebuklinga lazdelė, kuri žino, ką tu ten išvedinėji – defaultina į html.

Kažkodėl po 4 įterptų elementų į array atsiranda newlines.. Niekaip nesuprantu kur problema..
Tau nėra skirtumo. Gal pas tave išvis tas, per ką žiūri atsakymą eilutes laužo. Tavo duotas JSON išsiparsina puikiai.

JSON.parse('{"Sender":"Jonas Jonaitis","Receiver":"Jonas Jonaitis","Subject":"1","Content":"132132123146545465645"\n,"Date":"2013-08-06"}')
Object {Sender: "Jonas Jonaitis", Receiver: "Jonas Jonaitis", Subject: "1", Content: "132132123146545465645", Date: "2013-08-06"}

(\n tik todėl, kad JS nepalaiko multiline stringų (kode))
« Paskutinį kartą keitė: 2013-08-09 10:41:57 am sukūrė justinas »

Neprisijungęs vitalikaz

  • Dalyvis
  • **
  • Įrašai: 895
  • Karma: +59/-2
  • Tikėk kuo tiki
    • Žiūrėti profilį
    • blast.lt
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #14 Įrašytas: 2013-08-09 12:25:48 pm »
JSON.parse vienodai koks ten header'is, svarbu tekstas būtų tinkamas. Jeigu content-type'as app/json tiesiog callback'e nereikėtų papildomai parsint.
Hm, dabar pats pažiūrėjau. Jo, išparsina su newline'u paprastu, bet faktas, kad pas jį pati funkcija negali to string'o išparsinti. Gal ten koks nors kitas simbolis UTF'inis po \n eina, arba newline'as koks nors kitas. Tiesiog pas patį kažkada seniai buvo tokia pati problema, ir viskas dėl newline'o buvo, tai ir susitapatino sutuacijos. Ten kažkaip yra, kad JSON'e newline'ai turi būti pažymėti su "\\n" kai value dalyje yra, kad gerai susieitų, bet json_encode pats tuo pasirūpina. Pvz.
{"a": 123, "b": "lab
as"
, "c": "krabas"}
Tikrai neišsiparsins, nes newline'as value dalyje. Taip kad nereikia sakyti, kad vienodai jam ant tų whitespace'ų (čia aišku kas liečia value pusę - prisikabinu prie žodžių). Bet pas jį tai prieš kablelį.
« Paskutinį kartą keitė: 2013-08-09 12:30:04 pm sukūrė vitalikaz »

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #15 Įrašytas: 2013-08-09 13:52:57 pm »
Tai visdėlto nesuprantu kur gali būti problema, nors sakot, kad json geras, bet Jsonpare funkcijoje meta errorą, kad netinkamas. Bandžiau per validatorių tikrint, tai json'as pats geras...

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #16 Įrašytas: 2013-08-09 14:09:44 pm »
Radau keistą bėda, ten kur includina config.php, kažkodėl grąžina result, bet jų neeina su jsonparse išskaidyt. O jei iš config.php perdedu connectinimą į db, į sendmessageinfo failą tai viskas veikia, tik, kad antrą kartą į db connectinasi. Dabar kyla klausimas, kodėl includintame faile config.php connectinimas neveikia normaliai sendmessageinfo, nors visur kur includini jis veikia.

Neprisijungęs justinas

  • Naujokas
  • *
  • Įrašai: 164
  • Karma: +16/-3
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #17 Įrašytas: 2013-08-09 19:31:55 pm »
Ten kažkaip yra, kad JSON'e newline'ai turi būti pažymėti su "\\n" kai value dalyje yra, kad gerai susieitų, bet json_encode pats tuo pasirūpina. Pvz.
{"a": 123, "b": "lab
as"
, "c": "krabas"}
Tikrai neišsiparsins, nes newline'as value dalyje. Taip kad nereikia sakyti, kad vienodai jam ant tų whitespace'ų (čia aišku kas liečia value pusę - prisikabinu prie žodžių). Bet pas jį tai prieš kablelį.
Maišai JavaScript stringus, kurie yra kode. ir tiesiog tekstą.

JavaScript stringas, užrašytas kaip
var str = 'a\nb'
reiškia
a
b

Esmė – JavaScript sintaksė nepalaiko multiline stringų. T.y.
var a = 'labas\nrytas'; // veikia
var b = 'labas
rytas'; // sintaksės klaida

JSON newline yra \n, o ne \\n
{"a" : "labas\nrytas"}
Yra validus JSON. Tai nėra JavaScript stringas.

Tą patį stringą JavaScript sintaksėje užrašyti galime taip
var str = '{"a" : "labas\\nrytas"}'

Kodėl \\n? Visų pirma, stringą parsina JavaScript interpretatorius, kuris bet kokį \n keistų į newline. Todėl escape'inam \ su dar vienu \, ir tikrasis stringo turinys po parsinimo gaunasi
{"a" : "labas\nrytas"}

Tik tada stringą jau parsins JSON. Išparsinus JSON ir atspausdinus gauto objekto reikšmę pagal "a" raktą, gautume:
labas
rytas

Nereikia maišyti JavaScript ir JSON. JSON sintaksė iš dalies paimta iš JavaScript objektų, taisyklingas JSON bus taisyklingas JavaScript, bet ne atvirkščiai. Pavyzdžiui, JSON būtinos kabutės aplink raktus
{a : "sausainis"} // teisingas JavaScript, neteisingas JSON

O šiaip, TL;DR galima rasti JSON specifikacijoje, ir nereiks daryti teorijų, kas ir kaip.
Citata
Insignificant whitespace is allowed before or after any of the six structural characters.
« Paskutinį kartą keitė: 2013-08-09 19:36:17 pm sukūrė justinas »

Neprisijungęs @Jonas

  • Naujokas
  • *
  • Įrašai: 51
  • Karma: +0/-0
    • Žiūrėti profilį
Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #18 Įrašytas: 2013-08-09 19:40:21 pm »
Prieš tai rašytą problemą susitvarkiau perkeldamas connectinimą į db, į sendmessageinfo failą.

Manualai.lt Forumas

Ats: [ Jquery ] Json išprintinti pagal raktą ( key )
« Atsakymas #18 Įrašytas: 2013-08-09 19:40:21 pm »