Manualai.lt Forumas
HTML, CSS ir JavaScript diskusijos => jQuery => Temą pradėjo: @Jonas 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ą.
-
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);
}
});
-
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 ?
-
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ą?
-
Išveda tuos duomenis kuriuos parašiau. Kiek skaičiau tai reikia headerį json kažkokį nustatyt ar kažką tokio.
Pridedu nuotrauką :
-
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
-
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.
-
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ę?
-
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.
-
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.
-
SyntaxError: JSON.parse: unexpected character va koks erroras. Nesuprantu kaip tą new line pašalint ...
-
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 :)
-
Kažkodėl po 4 įterptų elementų į array atsiranda newlines.. Niekaip nesuprantu kur problema..
-
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))
-
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į.
-
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...
-
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.
-
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 (https://www.ietf.org/rfc/rfc4627.txt), ir nereiks daryti teorijų, kas ir kaip.
Insignificant whitespace is allowed before or after any of the six structural characters.
-
Prieš tai rašytą problemą susitvarkiau perkeldamas connectinimą į db, į sendmessageinfo failą.