Formát přenosu dat PHP a JSON. Vrácení JSON nefunguje podle očekávání

function getData(id) ( $.ajax(( url: "nějaká url", crossDomain: true, typ: "post", data: ( id: id), success: function (data) ( var json = jQuery.parseJSON( údaje (data ));

$name, "clubID" => $clubID, "lID" => $lID, "sName" => $sName, "description" => $desc)); echo $json; ?>

javascriptová varování ve formuláři... Co by nemělo být takové...

Neopakujte $ID ve svém PHP. Použijte vlastnost ajax dataType jQuery a nastavte ji na json. Použijte výchozí javascript json parser.

zkusit upozornit json a ne data?

Javascript vrací objekt, protože objekt ve skutečnosti upozorňujete. Zkuste alert(data.name);

nebo alert(data.clubID); , to bude fungovat.

Musíte specifikovat datový typ, na který se ajaxový požadavek ptá, jinak bude jQuery "inteligentně" detekovat na základě MIME typu. Pokud volání ajax přijme data json, použije je jako objekt JavaScriptu, a proto se vám zobrazuje toto varování.

Je to správné.

JSON je objekt. aka Javascript Object Notation. To by mělo být v případě. Měl by obsahovat vaše data. Vyzkoušejte data.* .

Mimochodem, pokud nevyčistíte data pocházející od vašich uživatelů před jejich použitím s jakýmkoliv SQL dotazem, způsobí to problémy.

Podívejte se na to v akci se základním příkladem:

// $_POST["id"] = "" NEBO 1"" $result = mysql_query("SELECT * FROM člena klubu WHERE ID klubu = "".$ID.""");

Váš požadavek nyní

VYBERTE * FROM člena klubu WHERE ID klubu ="" NEBO 1 ""

Protože 1 je vždy pravda, teď mohu vzít celý váš klubový stůl. Pozdravy.

I když parseJSON vrátí objekt, spuštění console.log by mělo ukázat, které pole objektu je

Volání .ajax() bude, pokud parametr dataType není zadán, "přiměřeně odhadnout", co požadovaná stránka vrátí.
V případě JSON předá objekt JavaScript funkci success.

Po zvážení vašich otázek věřím, že rozumím, co máte na mysli. To, co očekáváte, je jeden objekt (vyhledávání pomocí SQL, jak je uvedeno, je velmi nejisté) s 5 vlastnostmi, jménem, ​​ID klubu, lID, sName a popisem. Zdá se však, že vracíte více řádků se dvěma vlastnostmi?
Říkáte, že zatímco echo skriptu php má správné hodnoty (jeden řádek), ale JSON získá více hodnot (/řádky).
Jste si jisti, že PHP získává správné ID z volání AJAX?

JSON (JavaScript Object Notation) je formát pro výměnu dat v textové podobě. Umožňuje přenos složitých datových struktur v serializované formě. Tento formát přenosu dat se stal natolik populárním, že již v jádru PHP počínaje verzí 5.2.0 byly přidány funkce pro zpracování dat v tomto formátu. To znamená, že není potřeba připojovat další rozšíření. Datový formát JSON je vysoce čitelný pro člověka. Kromě toho je tento typ výměny dat široce používán mezi různými službami API. A se správným vývojem algoritmů pro výměnu informací můžete dosáhnout velmi vysokého nárůstu rychlosti než například při práci s daty ve formátu XML.

Odesílání dat

Existují dva způsoby, jak odeslat data ve formátu JSON: vytvořit požadavek GET nebo POST se zakódovanými daty umístěnými v proměnné GET nebo POST nebo umístit data do těla dokumentu. V praxi se obvykle používá druhá možnost.

Pro odesílání dat jsou vyžadovány následující funkce:

  • tětiva json_encode(smíšená hodnota [, možnosti int = 0 ])

    Parametr value určuje data, která je třeba zakódovat. Je podporován jakýkoli typ kromě typu zdroj. Parametr options obsahuje bitovou masku možných poskytnutých hodnot (viz tabulka s poskytnutými konstantami JSON).

  • zdroj stream_context_create (])

    Tato funkce je navržena tak, aby vytvořila a vrátila kontext vlákna s možnostmi zadanými v parametru options. Volitelný parametr options musí být typu asociativní pole. Zpočátku je prázdný. Druhý volitelný parametr params musí být také asociativní pole ve formátu $data['name'] = value.

  • tětiva file_get_contents(řetězec název_souboru [, bool use_include_path [, kontext zdroje [, int offset [, int maxlen ]]]])

    Pomocí této funkce můžete získat obsah souboru jako řetězec. Parametr filename je název souboru, který se má číst. V parametru use_include_path, počínaje PHP 5, můžete použít konstantu FILE_USE_INCLUDE_PATH k vyhledání souboru v začleněné cestě. Parametr context představuje kontextový prostředek vytvořený pomocí funkce stream_context_create(). Pokud se pokus o otevření souboru nezdaří, bude vrácena hodnota Nepravdivé. Parametr offset obsahuje offset, od kterého začne čtení dat. Parametr maxlen udává velikost přijímaných dat.

    Poznámka: Při práci se vzdálenými vlákny není zadán posun.

Níže je uveden příklad odesílání dat ve formátu JSON:

// Data k odeslání $request = array("StartDate" => "2013-10-10", "EndDate" => "2013-10-10", "IDS" => array(1,2,3,4 ,5,6,7)); // Určení voleb pro kontext streamu $options = array ("http" => pole ("method" => "POST", "header" => "Content-Type: application/json; charset=utf-8\r \ n", "obsah" => json_encode($request))); // Vytvoření kontextu streamu $context = stream_context_create($options); // Odeslání dat a získání výsledku echo file_get_contents("http://test.ru/json.php", 0, $context);

Zde se používá improvizovaná datová struktura sestávající z počátečního a koncového data a také z řady čísel některých podmíněných záznamů. Vezměte prosím na vědomí, že v záhlaví požadavku Typ obsahu je zadán typ „application/json“.

Přijímání dat

Pro příjem přenášených dat výše popsaným způsobem je nutné načíst data ze vstupního toku “ php://vstup”.

Funkce používané k přijímání dat:

  • smíšený json_decode(string json [, bool assoc = false [, int hloubka = 512 [, int options = 0 ]]])

    Tato funkce dekóduje řetězec ve formátu JSON. Parametr json určuje řetězec, který se má dekódovat. Parametr assoc řídí, zda budou vrácená data převedena na asociativní pole. Pokud existuje taková potřeba, musíte zadat hodnotu tohoto parametru skutečný. Parametr hloubky udává hloubku rekurze. A poslední čtvrtý parametr, možnosti, obsahuje bitovou masku možností pro dekódování. V současné době pouze podporováno JSON_BIGINT_AS_STRING(ve výchozím nastavení jsou velká celá čísla převedena na čísla s plovoucí desetinnou čárkou (float))

  • zdroj fopen(řetězec název_souboru , režim řetězce [, bool use_include_path [, kontext zdroje ]])

    Otevře soubor a vrátí jeho popisovač. Parametr filename je pojmenovaný prostředek ukazující na soubor. Parametr mode určuje typ přístupu k souboru (viz tabulka se seznamem možných režimů pro fopen()). Dále jsou dva volitelné parametry: use_include_path a context . Při nastavení use_include_path na skutečný nebo 1 a za předpokladu, že je jako pojmenovaný zdroj uvedena relativní cesta, bude soubor, který má být otevřen, prohledán v seznamu adresářů používaných funkcemi zahrnout A vyžadovat. V praxi se tento parametr prakticky nepoužívá. Parametr kontext se používá k určení kontextu zdroje.

  • tětiva stream_get_contents(handle zdroje [, int maxlen = -1 [, int offset = -1 ]])

    Tato funkce umožňuje získat obsah proudu jako řetězec. Parametr handle je prostředek vlákna. Parametr maxlen obsahuje maximální počet bajtů ke čtení. Ve výchozím nastavení je nastavena na -1, což znamená, že jsou přijímána všechna data. Parametr offset obsahuje offset, od kterého začne čtení dat. Ve výchozím nastavení je také nastavena na -1, což znamená, že čtení bude probíhat z výchozí pozice.

Níže je uveden příklad příjmu dat ve formátu JSON na straně serveru:

// Otevření vstupního proudu pro čtení $f = fopen("php://input", "r"); // Získání obsahu streamu $data = stream_get_contents($f); if ($data) ( // Kód zpracování print_r(json_decode($data)); )

Výsledná datová struktura:

Objekt StdClass ( => 2013-10-10 => 2013-10-10 => Array ( => 1 => 2 => 3 => 4 => 5 => 6 => 7))

Poznámka: Je potřeba počítat s tím, že pro práci s formátem JSON musí být data kódována v utf-8.

JSON poskytl konstanty pro funkci json_encode().

JSON_HEX_TAG (celé číslo) Všechny jsou zakódovány v \u003C a \u003E. K dispozici od PHP 5.3.0.
JSON_HEX_AMP (celé číslo) Všechny & jsou zakódovány v &. K dispozici od PHP 5.3.0.
JSON_HEX_APOS (celé číslo) Všechny znaky ' jsou zakódovány v \u0027. K dispozici od PHP 5.3.0.
JSON_HEX_QUOT (celé číslo) Všechny znaky " jsou zakódovány v \u0022. Dostupné od PHP 5.3.0.
JSON_FORCE_OBJECT (celé číslo) Při použití neasociativního pole vrátí objekt místo pole. To je užitečné, když přijímající program nebo kód očekává objekt nebo je pole prázdné. K dispozici od PHP 5.3.0.
JSON_NUMERIC_CHECK (celé číslo) Kódování řetězců obsahujících čísla jako čísla. K dispozici od PHP 5.3.3.
JSON_BIGINT_AS_STRING (celé číslo) Kóduje velká celá čísla jako jejich řetězcové ekvivalenty. K dispozici od PHP 5.4.0.
JSON_PRETTY_PRINT (celé číslo) K formátování použijte ve vrácených datech mezery. K dispozici od PHP 5.4.0.
JSON_UNESCAPED_SLASHES (celé číslo) Neuteč /. K dispozici od PHP 5.4.0.
JSON_UNESCAPED_UNICODE (celé číslo) Nekódujte vícebajtové znaky Unicode (ve výchozím nastavení jsou kódovány jako \uXXXX). K dispozici od PHP 5.4.0.

Seznam možných režimů pro fopen() pomocí mode

'r' Otevře soubor jen pro čtení; umístí ukazatel na začátek souboru.
'r+' Otevře soubor pro čtení a zápis; umístí ukazatel na začátek souboru.
'w' Otevře soubor pouze pro zápis; umístí ukazatel na začátek souboru a zkrátí soubor na nulovou délku. Pokud soubor neexistuje, pokusí se jej vytvořit.
'w+' Otevře soubor pro čtení a zápis; umístí ukazatel na začátek souboru a zkrátí soubor na nulovou délku. Pokud soubor neexistuje, pokusí se jej vytvořit.
'A' Otevře soubor pouze pro zápis; umístí ukazatel na konec souboru. Pokud soubor neexistuje, pokusí se jej vytvořit.
'a+' Otevře soubor pro čtení a zápis; umístí ukazatel na konec souboru. Pokud soubor neexistuje, pokusí se jej vytvořit.
'X' Vytváří a otevírá pouze pro zápis; umístí ukazatel na začátek souboru. Pokud soubor již existuje, volání fopen() se nezdaří, vrátí FALSE a vyvolá chybu E_WARNING. Pokud soubor neexistuje, pokusí se jej vytvořit. To je ekvivalentní zadání příznaků O_EXCL|O_CREAT pro interní systémové volání open(2).
'x+' Vytváří a otevírá pro čtení a psaní; jinak má stejné chování jako 'x'.
'C' Otevře soubor pouze pro zápis. Pokud soubor neexistuje, je vytvořen. Pokud soubor existuje, pak není zkrácen (na rozdíl od 'w') a volání této funkce nezpůsobí chybu (jako v případě 'x'). Ukazatel souboru bude nastaven na začátek souboru. To může být užitečné, pokud chcete soubor zamknout (viz flock()) před jeho změnou, protože použití 'w' může zkrátit soubor před získáním zámku (pokud chcete zkrátit soubor, můžete použít ftruncate () funkce po vyžádání zámku).
'c+' Otevře soubor pro čtení a zápis; jinak má stejné chování jako 'c'.

V tomto článku chci mluvit o formátu výměny textových dat - JSON a konkrétně o práci s tímto formátem v PHP.

JSON je kompaktní formát textových dat. Lze jej použít jak ve službách internetového přenosu dat, tak pro ukládání informací ve strukturované podobě.

JSON( Angličtina Zápis objektů JavaScript) je textový formát pro výměnu dat založený na JavaScriptu a běžně používaný s tímto jazykem. Stejně jako mnoho jiných textových formátů je JSON snadno čitelný pro lidi.

Přes svůj původ v JavaScriptu (přesněji z podmnožiny jazyka standardu ECMA-262 z roku 1999) je formát považován za jazykově nezávislý a lze jej použít téměř s jakýmkoli programovacím jazykem. Pro mnoho jazyků existuje hotový kód pro vytváření a zpracování dat ve formátu JSON.

Praktické výhody používání JSON jsou odhaleny při použití technologie AJAX. Formát JSON je stručnější a čitelnější než XML a je nativní pro Javascript. Do JSON kódu je navíc možné vkládat plně funkční funkce.

Ano, právě v technologii AJAX je podle mého názoru její hlavní uplatnění. Protože technologie AJAX zahrnuje odeslání požadavku klienta na server. Dále je požadavek zpracován na serveru a výsledek je odeslán jako odpověď klientovi.

Typ dat ve formátu JSON

JSON podporuje všechny hlavní datové formáty: řetězce, čísla, booleany, stejně jako pole a objekty (kombinace klíč:hodnota oddělené čárkami a uzavřené ve složených závorkách).

Zde je příklad reprezentace dat ve formátu JSON:

("id":"1","name":"ivan","country":"Rusko","office":["yandex","management"])

Podívejme se, co může tento řádek sdělit: osoba se jménem „ivan“, pod identifikátorem „1“, žijící v zemi „Rusko“, pracuje ve společnosti „yandex“ v oddělení „management“.

Uveďme další příklad. Stránka má formulář zpětné vazby využívající technologii AJAX. Návštěvník vyplní informace, poté se odešlou na server k ověření, pokud nejsou nalezeny žádné chyby, informace se uloží do databáze a odešle se odpověď o úspěšném uložení. Pokud jsou však nalezeny chyby, je vrácena odpověď s typy chyb.

Příklad chybové odpovědi ve formátu JSON:

("error":"1","errorcode":["empty_pers","empty_mail","empty_phone","empty_letter","empty_scode"])

Což například znamená:

  • Musíte vyplnit pole „Kontaktní osoba“.
  • Musíte vyplnit pole „E-mail“.
  • Musíte vyplnit pole „Telefon“.
  • Zadejte text zprávy
  • Je nutné vyplnit pole „Číslo na obrázku“

Pokud nejsou žádné chyby, je vrácena odpověď:

("chyba":"0")

Což značí úspěšné odeslání dat.

V PHP se rozšíření JSON používá k reprezentaci dat ve formátu JSON. Ve verzích PHP starších než 5.2.0 je podpora JSON zabudována do jádra, v dřívějších verzích musíte do skriptu zahrnout další soubor s funkcemi.

V PHP jsou tedy za práci s daty ve formátu JSON zodpovědné dvě funkce: json_encode() a json_decode() .

Převod dat do formátu JSON

$json_data = pole ("id"=>1,"name"=>"ivan","country"=>"Rusko","office"=>array("yandex","management")); echo json_encode($json_data);

Převod dat zpět z formátu JSON

$json_string="("id":1,"name":"ivan","country":"Rusko","office":["yandex","management"]) "; $obj=json_decode($json_string);

Nyní bude $obj obsahovat data JSON přeložená do objektu PHP, ke kterému můžete přistupovat následovně:

Echo $obj->name; //Zobrazí jméno ivan echo $obj->office; //Zobrazení společnosti yandex

Jak vidíte, $obj->office je pole.

Foreach($obj->kancelář jako $val) echo $val;

Práce s JSON umožňuje výměnu dat se serverem v "čistá forma". Není třeba posílat objemné kusy HTML kódu.




Horní