Premenná Najlepší spôsob, ako preniesť pole medzi PHP a Javascript. Javascript - prenos poľa z php do js Ako odovzdať pole z php do js

AJAX a jQuery. Odovzdávanie parametrov z PHP do JavaScriptu. Použitie JSON
(zmeny od 10.12.2012)

Tí, ktorí programujú aplikácie AJAX, často stoja pred výzvou prenosu parametrov z PHP alebo iného programovacieho jazyka do JavaScriptu. Spravidla sa tým budú prenášať údaje z databázy, ku ktorej má prístup iba skript servera. Ako ich môžem zobraziť na klientskom počítači bez opätovného načítania stránky? Práve o tom je tento článok.

Povedzme si pár slov o JSON (JavaScript Object Notation). Toto je textový protokol na výmenu údajov, trochu podobný známejšiemu XML, ale údaje sú doň zapísané kompaktnejšie. Pôvodne bol vyvinutý pre potreby JavaScriptu (odtiaľ pochádza aj jeho názov), ale v súčasnosti sa používa viac.

Napríklad, ak chceme napísať pole z PHP do JSON, potom to bude to, čo z toho vzíde.

Zdrojové pole:

$ n = pole ("Min" => 15, "Sek" => 44);

Rovnaké pole vo formáte JSON:

(„Min“: „15“, „Sec“: „44“)

Podrobný zápis formátu JSON a jeho aplikácií pre rôzne programovacie jazyky je uvedený na stránke http://www.json.org/

Pozrime sa na jednoduchý príklad, ktorý bude pozostávať z dvoch súborov.

Prvým súborom bude skript PHP, ktorý vygeneruje záznam JSON obsahujúci aktuálne minúty a sekundy.

Druhým súborom bude stránka HTML obsahujúca JavaScript pomocou knižnice jQuery, ktorá každú 1 sekundu zavolá skript PHP, prijme záznam JSON a jeho obsah odošle do kontajnera webovej stránky.

Spisové číslo 1. json.php

dátum („i“), „Sec“ => dátum („s“)); echo json_encode ($ n); ?>

Na prvom riadku súboru vo funkcii hlavička () nastavíme výstupný formát záznamu JSON, označíme, že dokument je JavaScript "v kódovaní UTF-8.

V druhom riadku vytvoríme asociatívne pole s poľami Min a Sek, do ktorého napíšeme aktuálne hodnoty minút a sekúnd.

V treťom riadku vytvoríme záznam JSON z vytvoreného poľa.

Pozor! Funkcia json_encode () bude fungovať iba v PHP 5.2 a vyššom.

Spisové číslo 2. example.html

Na stránke HTML sa vytvorí kontajner Info... Funkcia json_example () beh raz za sekundu používa funkciu jQuery $ .getJSON (), pomocou ktorého prijíma záznam JSON zo servera volaním súboru json.php. Ďalej je výsledný záznam JSON funkciou rozdelený na páry kľúč-hodnota $ .each (), sa zhromažďuje vo forme HTML do premennej s a je vyvedený do kontajnera Info, t.j. na obrazovku v klientskej aplikácii.

Stiahnite si zdrojové súbory z príkladu (33 kb):

Dôležité!
Aby príklady správne fungovali, musíte:
1. Všetky súbory musia byť zapísané v kódovaní UTF-8.
2. Skripty PHP musia byť spustené na webovom serveri a nesmú byť spustené v súboroch prehliadača.

Existujú dve otázky: 1) Ako získať z databázy to, čo potrebujem. 2) ako preniesť to, čo som dostal zo základne v JavaScripte, mám súbor html. obsahuje súbor javascript map.js a súbor map.php. skript java je spustený normálne, ale súbor pkhp nie je spustený ako. ako spojiť javascript a pkhp dohromady v html súbore, neviem. Neštudoval som pkhp a javascript, mám trochu inú špecializáciu, ale teraz, ak je to potrebné, musím niečo napísať.

tu je kód map.php:

tu zo základne musím získať pole prvkov súradnice 1 a súradnice 2 príklad formátu prvku poľa

potom je potrebné toto pole odovzdať do JavaScriptu, tu je už pre mňa inicializovaný, ale musíte ho vyplniť z databázy. Pole sa nazýva markery. map.js

Mapa Var; var bod = 1; // body pre značky var motora = (bod1:, bod2:, bod3:, bod4:, bod5:, bod6:, bod7:, bod8:, bod9:, bod10:,); $ (document) .ready (function () (// map var latlng = new google.maps.LatLng (55.755786, 37.617633); var myOptions = (zoom: 13, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP ); var map = new google.maps.Map (document.getElementById ("map_canvas"), myOptions); // označ všetky body na mape var marker =; for (i in markers) (marker [i] = nový google . maps.Marker ((pozícia: nový google.maps.LatLng (značky [i], značky [i]), mapa: mapa));) //map.panTo(novy google.maps.LatLng (markers.point10, markers .point10)); // map engine by points function mover () (map.panTo (new google.maps.LatLng (markers ["point" + point], markers ["point" + point])); point + +; if (point> 10) point = 1;) // map is not used google.maps.event.addListener (map, "idle", function () (setTimeout (mover, 500); // time in milliseconds) );));

P.S. pretože z dôvodu nedostatku bodov neexistuje spôsob, ako dať plus alebo odpoveď, napíšem sem. ďakujem užívateľovi Inkognito,dekameron pre pomoc. Dostal som, čo som chcel implementovať. Všetko funguje. Použil som myšlienku dekamerónu. Prvý alebo druhýkrát pracujem s pkhp. Dlho som kupoval, čo je podstatou a prečo to nefunguje, ukázalo sa, že mám súbor html a v ňoma tiež

pole (5) (=> pole (7) (["id"] => reťazec (1) "1" ["otázka"] => reťazec (143) "______________ tabuľky sa používa na úpravu dizajnu tabuľka, napríklad úprava názvu poľa alebo zmena dátového typu poľa. "[" answer1 "] => string (14)" Datasheet View "[" answer2 "] => string (11)" Desisn View " ["answer3"] => string (10) "Table View" ["answer4"] => string (11) "Wizard View" ["true_answer"] => string (1) "1") => array (7 ) (["id"] => reťazec (1) "2" ["otázka"] => reťazec (83) "Viaceré polia tabuľky v dizajnovom zobrazení môžete vybrať pomocou klávesu ________." ["odpoveď1" ] => reťazec (3) "Alt" ["answer2"] => reťazec (8) "Medzerník" ["answer3"] => reťazec (5) "Shift" ["answer4"] => reťazec (4) " Ctrl "[" true_answer "] => reťazec (1)" 3 ") ... Uncaught SyntaxError: chýba) za zoznam argumentov

Záver:
Z php stránky je všetko v poriadku. Ale keď sa pokúsime analyzovať toto pole na objekt js v časti js, vidíme zvláštnu chybu.

  1. Ako načítať údaje (napríklad v mojom prípade súvisiace pole) z php do js. Keď sú php a js v rovnakom súbore prípony (php).
    1. Ako načítať údaje (napríklad v mojom prípade súvisiace pole) z php do js. Keď sú súbory php a js v rôznych súboroch. Máme napríklad 1 súbor rozšírenia php, do ktorého sme implementovali logiku (v mojom prípade je to DB). A tieto údaje musíme importovať do súboru rozšírenia js.

Riešenie

1) Všetko, čo musíte urobiť, je:

JSON = JavaScript Object Notation ... je už vo formáte, ktorý je možné priradiť k premennej na použitie v javascripte.

Priradiť ho k „const“ ... pravdepodobne nie je dobrý nápad, pretože je to objekt, ale je to spôsob, akým ich čítam, a stále v poriadku: Ďalšie informácie.

2) Ak voláte php súbor z js (ala ajax), potom môžete vrátiť surový JSON z php return a podľa toho, AKO ste uskutočnili svoje ajax volanie (a s ktorou knižnicou, napríklad možno s jquery) ... vy môže alebo nemusí byť potrebné vykonať JSON.parse (returnData). Na jasnú odpoveď nie je dostatok informácií o tom, ako to chcete urobiť.

Iné riešenia

Mali by ste sa dozvedieť o JSON.
Je to syntax, ktorú je možné analyzovať v akomkoľvek jazyku, vrátane JS.

jednoducho preneste svoje pole z PHP do kódu JacaScript takto:

Váš php kód sa zvyčajne objaví na stránke html. Na tejto stránke môžete údaje štruktúrovať podľa svojich potrieb. Príklady (vo vašom php kóde):

// ako js - premenná:

otázky budú globálnou premennou JS, na ktorú sa môžete dostať
z iného js.súboru alebo z js vloženého do html súboru.

// Ako údaje vo vašom html: // Then fetch this data using js-code, eg in a different js-file: alert(document.getElementById("id_questions").value()); !}

To sa dá dosiahnuť aj z externého súboru js alebo js vloženého do výstupu html z vášho kódu php.



odovzdať premennú z php do javascriptu ajax (4)

Na to zvyčajne používam objekt JSON:

  • Na strane servera JSON kóduje vaše údaje: json_encode ($ data);
  • Na strane JavaScriptu píšem funkciu, ktorá ako parameter vezme objekt JSON a rozbalí ho.

Keď objekt rozbalíte, môžete vytlačiť obsah poľa do

alebo kdekoľvek na stránke chcete (jQuery robí celkom peknú prácu).

Mám teda množstvo záznamov načítaných z databázy. Pole je vo formáte;

$ riadky [0] ["id"] = 1; $ riadky [0] ["title"] = "Abc"; $ riadky [0] ["time_left"] = 200; $ riadky [1] ["id"] = 2; $ riadky [1] ["title"] = "XYZ"; $ riadky [1] ["time_left"] = 300; // A tak ďalej až do 10-20 riadkov

Aký je najlepší spôsob, ako zabaliť toto pole do môjho kódu JavaScript? Chcel by som, aby javascript mohol prechádzať všetkými príspevkami a používať atribút „id“, aktualizovať div pomocou tohto ID o niektoré informácie.

Môj kód JavaScript je v externom súbore .js, ale môžem spustiť kód php v HTML svojej stránky. Mohol by som teda urobiť niečo také:

V my_file.js:

var riadky = Nové pole ();

V kóde HTML:

Ak robíte vložené údaje, vždy som ich rád robil

Pre základné veci ponecháte spätné volanie AJAX. Tiež, ak chcete prilepiť údaje do uzla DOM, spôsob, ktorý skutočne milujem, je spôsob „metaobjektu“.

Teraz to nemusí vyzerať dobre, ale je to účinný spôsob, ako viazať údaje priamo na uzol DOM bez toho, aby ste museli poznať presnú jedinečnú cestu k tomuto uzlu. Je to veľmi výhodné, ak máte veľa súborov údajov, ktoré je potrebné viazať na určité prvky obrazovky.

Na jQuery zvyčajne používam doplnok http://noteslog.com/metaobjects/, ale je to také jednoduché, že to niekedy napíšem sám (bolo obdobie, keď som doplnok nenašiel, ale nové, ako to fungovalo)

Keď to bude hotové, bude

$ ("div # foobar> div"). dostať (). údaje ($ yourarrayhere)

Viditeľné pre váš kód.

Aby som odpovedal na vašu otázku (a na moju odpoveď, v odpovedi na komentár som skončil s prázdnym miestom), uvádzam veľmi zjednodušenú podmnožinu kódu, ktorý používam:

Obslužný program Javascript AJAX v jQuery:

$. ajax ((typ: "POST", adresa URL: "BACKEND.php", časový limit: 8000, údaje: "var1 =" + myVar, dataType: "json", chyba: function () ($ ("#DIVID"). html ( "
Chyba!
"
); ), success: function (jsonObj) ($ ("#DIVID"). html (jsonObj. mydata);))); Pole PHP: $ data ["mydata"] = $ myData;

Som ešte celkom nový, aby som povedal, možno táto metóda nie je najbezpečnejšia, ale pole javascript môžete kedykoľvek zmeniť na reťazec a potom ho odoslať prostredníctvom adresy URL do php pre GET.

pre (var i = 0; i< jsarray . length ; i ++) { var x = jsarray [ i ]; urlstring += "myvalue="+ x +"&" ; } document . location . href = "mypage.php?" + urlstring ;

a potom php bude:

$ phparray = $ _GET ["myvalue"];

Dúfam, že to pomôže