Autor Zpráva
quatzael
Profil
Ahoj, potřebuju odesílat multiple object JSON pomocí AJAXU na server. Není lepší to přímo posílat jako string a tam to až parsovat?
Googlil jsem nějaký možný řešení, ale zdá se mi, že všude píšou o tom, že to má nějaký háčky a nefunguje ve všech prohlížečích, když se to posílá přímo jako objekt..

 

var jsonstring = '{"category_1":[{"Product":"Bike","Price":"99"},{"Product":"Motorbike","Price":"799"}],"category_2":[{"Product":"MiniBike","Price":"49"},{"Product":"Minimotorbike","Price":"399"}]}';

$.ajaxSetup({
    'beforeSend' : function(xhr) {
    xhr.overrideMimeType('text/html; charset=UTF-8');
    }
  });

$.ajax({
url: "/php/ajax.php",    
type: "POST",        
data: {data: jsonstring},          
success: function (answer) {
}});

Jde to takhle? Je to kosher? A bude v PHP pak stačit už jen použít funkci json_decode?
Díky za rady.
_es
Profil
quatzael:
Není lepší to přímo posílat jako string a tam to až parsovat?
A ako inak by si to chcel posielať? Čo je asi tak v premennej jsonstring?
Okrem toho, funkciu jQuery.ajaxSetup samotné jQuery neodporúča používať.
quatzael
Profil
_es:
Myslel jsem jako JSON objekt..


Já jsem tady ukázal jak bych to řešil já. Jen se ptám jestli je to tak správně?
_es
Profil
quatzael:
Myslel jsem jako JSON objekt..
Čo si predstavuješ pod „JSON objektom“ v JS?
quatzael
Profil
_es:
No asi to, co udělá funkce eval s JSON stringem..
_es
Profil
quatzael:
Rozumieš aspoň ty sám tomu, čo sa pýtaš? V [#1] odosielaš obyčajný textový reťazec v premennej jsonstring. JQuery obalové metódy na AJAX z toho žiadny podivný špeciálny objekt nevytvoria. V starších prehliadačoch ti akurát nebude fungovať JSON.stringify.
quatzael
Profil
_es:
A četl jsi na co jsem se ptal? (Já se omlouvám, ale mě někdy připadá jako by tady někteří lidé nerozuměli česky..)
Ptal jsem se jestli je ok posílat JSON jako string a ne jako objekt, tedy tak jak jsem uvedl v ukázce. Všude na netu co jsem hledal to řeší tak, že to posílají jen jako objekt a pak řeší nějaký bugy, který jsou s tím spojený..
_es
Profil
quatzael:
Ptal jsem se jestli je ok posílat JSON jako string a ne jako objekt, tedy tak jak jsem uvedl v ukázce.
Inak ako text to aj tak na server odoslať nejde, takže žiaden „objekt“ ani v jednom prípade odosielaný nie je. Problémy môžu nastať s vygenerovaním toho textu v JS, alebo s jeho spracovaním na serveri. Nevyjadril si sa dosť jasne, takže to vyzeralo, že tvrdíš, že v [#1] odosielaš nejaký „objekt“. No ani v inom prípade žiadne „objekty“ odosielané nie sú. Z hľadiska odoslania dát v JS môžeš uvažovať, odkiaľ ten text vezmeš, či z čoho ho vygeneruješ, jeden možný problém je spomenutý v [#6].

Môžeš dať kód, kde sú podľa teba dáta odoslané ako objekt, aby bolo jasné, čo tým myslíš?
quatzael
Profil
_es:
No já jsem trochu zagooglil a hned na mě vypadlo tohle:
jquery-ajax-how-to-send-json-instead-of-querystring

a tohle:
send-json-data-via-post-ajax-and-receive-json-response-from-controller-mvc
_es
Profil
[#9] quatzael:
No veď to je stále to isté, akurát je výsledný text odosielaný serveru nejako zostavený vo funkcii jQuery.ajax. Ako funguje, si pozri v dokumentácii jQuery (https://api.jquery.com/jQuery.ajax/) - parameter dataType určuje, ako majú byť spracované dáta vrátené zo servera.
quatzael
Profil
_es:
Máš pravdu, je tam ta funkce stringify..

Každopádně jsem myslel, že když dataType určuje data vrácené ze serveru, tak contentType zase naopak určuje jak se mají zpracovat data odesílané na server..
dataType: 'json',  contentType: 'application/json; charset=UTF-8'
_es
Profil
[#11] quatzael:
Myslím, že to len nastaví HTTP hlavičku Content-Type - aspoň sa mi z dokumentácie nezdá, že by to robilo nejaké iné „kúzla“.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: