předání dat z javascript do PHP
21. zář 2015 00:10 - 21. zář 2015 00:10 #123490
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Odpověď od karel

Zkušený uživatel
... "aby mi místo alertu vrátil tyto hodnoty na server" ...
na serveru to je v okamžiku, kdy "zavoláte" soubor lokace.php (... $name = $_REQUEST; )(tj se to na serveru už jednou zpracovalo), tak si to zpracujte jak potřebujete rovnou z toho. A pokud se má odeslat Lang i Lat. později (po vyplnění celého formuláře), pak potřebujete (pro jednoduchost) vyplnit právě tyto do políčka (třeba skrytého), a odeslat najednou.
na serveru to je v okamžiku, kdy "zavoláte" soubor lokace.php (... $name = $_REQUEST; )(tj se to na serveru už jednou zpracovalo), tak si to zpracujte jak potřebujete rovnou z toho. A pokud se má odeslat Lang i Lat. později (po vyplnění celého formuláře), pak potřebujete (pro jednoduchost) vyplnit právě tyto do políčka (třeba skrytého), a odeslat najednou.
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Poděkovali: Ernst
21. zář 2015 11:15 - 21. zář 2015 11:16 #123495
Odpověď od Ernst
Joomla Expert
tak jsem zkusmo udělal ten JS:
function showPosition(position) {
lat = position.coords.latitude ;
lon = position.coords.longitude ;
}
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
alert("ERR: Prohlizec nepodporuje Geolocation API");}
jQuery(document).ready(function(){
jQuery("#savename").click(function(){
var name = jQuery('#name').val();
jQuery.post("/components/com_lovefactory/models/lokace.php?latitude="+lat+'a'+lon, {
}, function(response){
jQuery('#results').html(jQuery(response).fadeIn('slow'));
});});});
a ten mi vrátí latitude+longitude
Asi to ale dělám složitě, potřebuji na server poslat jen ty dvě hodnoty, nepotřebuji žádné vstupní pole ani buttom. nemá se prostě nic zobrazit. Jak to napsat správně?
Je možné na server poslat dvě proměnné nebo jen jednu a tu si v PHP rozdělit?
function showPosition(position) {
lat = position.coords.latitude ;
lon = position.coords.longitude ;
}
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
alert("ERR: Prohlizec nepodporuje Geolocation API");}
jQuery(document).ready(function(){
jQuery("#savename").click(function(){
var name = jQuery('#name').val();
jQuery.post("/components/com_lovefactory/models/lokace.php?latitude="+lat+'a'+lon, {
}, function(response){
jQuery('#results').html(jQuery(response).fadeIn('slow'));
});});});
a ten mi vrátí latitude+longitude
Asi to ale dělám složitě, potřebuji na server poslat jen ty dvě hodnoty, nepotřebuji žádné vstupní pole ani buttom. nemá se prostě nic zobrazit. Jak to napsat správně?
Je možné na server poslat dvě proměnné nebo jen jednu a tu si v PHP rozdělit?
21. zář 2015 12:41 - 21. zář 2015 12:43 #123496
Odpověď od Cony

Moderátor
V tom JS máte špatně sled volání jednotlivých funkcí, a způsob předání parametrů do AJAX.
funkce getCurrentPosition maá jako parametr funkci, která se asynchronně zavolá po zjištění souřadnic. Nemůžete tedy zavolat funkci getCurrentPosition a pak pokračovat v kódu, který výsledek zpracovává, výsledek v ten okamžik vůbec nemusí existovat. Odesílat data musíte až v callback funkci.
Oddělovač pro parametr v URL není 'a' ale &
Bez omáčky kolem jen s výpisem chyb do konzole by to tedy mohlo být nějak takto
Na serveru zpracováváte výsledek v samostatném PHP souboru, který si natahuje framework Joomly, to také není ideální. Měl by jste si upravit přímo komponentu, její controller a model tak aby jste mohl volat Joomlu přímo. Pro inspiraci se můžete podívat např. na com_ajax o které už jsem psal.
funkce getCurrentPosition maá jako parametr funkci, která se asynchronně zavolá po zjištění souřadnic. Nemůžete tedy zavolat funkci getCurrentPosition a pak pokračovat v kódu, který výsledek zpracovává, výsledek v ten okamžik vůbec nemusí existovat. Odesílat data musíte až v callback funkci.
Oddělovač pro parametr v URL není 'a' ale &

Bez omáčky kolem jen s výpisem chyb do konzole by to tedy mohlo být nějak takto
Code:
jQuery(function(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
jQuery.ajax({
url: '...',
data: {lat: position.coords.latitude, lgt: position.coords.longitude}
}).done(function(){
console.log('Odesláno');
}).fail(function(){
console.log('Odeslání selhalo');
});
}, function(error){
console.log('Zjitění souřadnic selhalo');
console.log(error.message);
});
}
});
Na serveru zpracováváte výsledek v samostatném PHP souboru, který si natahuje framework Joomly, to také není ideální. Měl by jste si upravit přímo komponentu, její controller a model tak aby jste mohl volat Joomlu přímo. Pro inspiraci se můžete podívat např. na com_ajax o které už jsem psal.
Poděkovali: Ernst
21. zář 2015 14:16 #123497
Odpověď od Ernst
Joomla Expert
Já Vám strašně moc děkuji, že si mi takto věnujete. Hodně jste mně toho naučil.
ten sled funkcí se mi taky nezdál, ale fungovalo to. Dokonce jsem měl hned na začátku nadefinovány ty dvě proměnné, ale nebylo to třeba. Vysvětlit to samozřejmě neumím ani nepotřebuji.
To "a" jsem tam měl jen proto, že jsem zatím neuměl odeslat zpět dvě proměnný, tak jsem si výsledek v php rozdělil pomocí toho "a" na dvě proměnný.
Pomocí toho v php
$document = &JFactory::getDocument();
$document->addScript('/components/com_lovefactory/js/lokace.js');
se mi javascript odešle (do console vypíše odesláno), Jak to vlastně funguje mi není zcela jasné, ale beru to jako fakt a později se to doučim.
ale v tom lokace php to asi nemohu přečíst jako $_REQUEST ale musím použít $_GET?
Studoval jsem to na mnoha webech, nejnověji na jaknajquery.cz/ajax-a-jquery/ a www.koding.cz/priklady.php?id=26
Samozřejně bych raději upravil tu komponentu (z ní to volám) ale přijímám v jiném PHP, ale zatím to neumím.
Jde o stránku, kde zobrazuji uživatele a potřebuji vypsat vzdálenost od mé aktuální pozice.
Takže tu stránku (funkci) musím nějak znovu zavolat s parametry, které jsem získal z JS.
Nebo ten JS volat o něco dřív a použít Vámi nenáviděnou globální proměnnou s mojí geolokací. To by také teoreticky šlo?
ten sled funkcí se mi taky nezdál, ale fungovalo to. Dokonce jsem měl hned na začátku nadefinovány ty dvě proměnné, ale nebylo to třeba. Vysvětlit to samozřejmě neumím ani nepotřebuji.
To "a" jsem tam měl jen proto, že jsem zatím neuměl odeslat zpět dvě proměnný, tak jsem si výsledek v php rozdělil pomocí toho "a" na dvě proměnný.
Pomocí toho v php
$document = &JFactory::getDocument();
$document->addScript('/components/com_lovefactory/js/lokace.js');
se mi javascript odešle (do console vypíše odesláno), Jak to vlastně funguje mi není zcela jasné, ale beru to jako fakt a později se to doučim.
ale v tom lokace php to asi nemohu přečíst jako $_REQUEST ale musím použít $_GET?
Studoval jsem to na mnoha webech, nejnověji na jaknajquery.cz/ajax-a-jquery/ a www.koding.cz/priklady.php?id=26
Samozřejně bych raději upravil tu komponentu (z ní to volám) ale přijímám v jiném PHP, ale zatím to neumím.
Jde o stránku, kde zobrazuji uživatele a potřebuji vypsat vzdálenost od mé aktuální pozice.
Takže tu stránku (funkci) musím nějak znovu zavolat s parametry, které jsem získal z JS.
Nebo ten JS volat o něco dřív a použít Vámi nenáviděnou globální proměnnou s mojí geolokací. To by také teoreticky šlo?
21. zář 2015 16:11 #123498
Odpověď od Ernst
Joomla Expert
Někde je chyba a nevím kde
lokace.js:
jQuery(function(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
jQuery.ajax({
url: '/components/com_lovefactory/models/lokace.php',
data: {lat: position.coords.latitude, lgt: position.coords.longitude}
}).done(function(){
console.log('Odeslano');
}).fail(function(){
console.log('Odeslání selhalo');
});
}, function(error){
console.log('Zjitění souřadnic selhalo');
console.log(error.message);
});
}
});
ale to lokace.php se nezavolá
lokace.js:
jQuery(function(){
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
jQuery.ajax({
url: '/components/com_lovefactory/models/lokace.php',
data: {lat: position.coords.latitude, lgt: position.coords.longitude}
}).done(function(){
console.log('Odeslano');
}).fail(function(){
console.log('Odeslání selhalo');
});
}, function(error){
console.log('Zjitění souřadnic selhalo');
console.log(error.message);
});
}
});
ale to lokace.php se nezavolá
22. zář 2015 09:41 #123505
Odpověď od Ernst
Joomla Expert
Tedy ono se zavolá:
GET http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999
ale v lokace php se mi nic neděje.
Poslané hodnoty nemohu zobrazit (třeba var_dump()) a když v tom lokace.php udělám úmyslně chybu syntaxe žádná chyba se nevypíše.
Prostě to vypadá, jako by to php neproběhlo.
Celé to lokace php jsem napsal jen:
<?php $lat = $_GET["lat"]; $lon = $_GET["lgt"];
var_dump($lat); var_dump($lat);?>
Ale nic se nevypíše. Kde prosím dělám chybu?
GET http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999
ale v lokace php se mi nic neděje.
Poslané hodnoty nemohu zobrazit (třeba var_dump()) a když v tom lokace.php udělám úmyslně chybu syntaxe žádná chyba se nevypíše.
Prostě to vypadá, jako by to php neproběhlo.
Celé to lokace php jsem napsal jen:
<?php $lat = $_GET["lat"]; $lon = $_GET["lgt"];
var_dump($lat); var_dump($lat);?>
Ale nic se nevypíše. Kde prosím dělám chybu?
22. zář 2015 09:44 #123506
Odpověď od Cony

Moderátor
A kde jako čekáte, že se Vám to vypíše? Kontroloval jste v konzoli výsledek AJAX dotazu?
22. zář 2015 09:54 - 22. zář 2015 09:58 #123507
Odpověď od Ernst
Joomla Expert
ano kontroloval, vše OK
Myslím, že by se to mělo vypsat v tom PHP
PS Pokud do js přidám alert, tak to také vypíše správně
Možná jsme se trefili do stejného času a nečetl jste moji poslední odpověď
Myslím, že by se to mělo vypsat v tom PHP
PS Pokud do js přidám alert, tak to také vypíše správně
Možná jsme se trefili do stejného času a nečetl jste moji poslední odpověď
22. zář 2015 12:09 #123508
Odpověď od Cony

Moderátor
Tak schválně, za domácí úkol se zkuste nad tím zamyslet, co to znamená to "vypsat v tom PHP", kde hledat to co si "vypíšte v tom PHP". (malá nápověda AJAX = Asynchronous Javascript And Xml).ernst napsal: ano kontroloval, vše OK
Myslím, že by se to mělo vypsat v tom PHP
22. zář 2015 13:08 - 22. zář 2015 13:14 #123509
Odpověď od Ernst
Joomla Expert
myslím v tom php co volám z JS, tedy lokace.php ne v tom odkud to volám.
Kde jinde bych si ty hodnoty měl přečíst?
V té mé předchozí variantě, kde jsem testoval ty pole a tlačítko se mi to v tom vypsalo a mohl jsem s tím pracovat.
Já přeci to lokace.php volám s těmi parametry, tak bych to tam měl mít a mít možnost s tím pracovat.
ten ajax v JS přeci zavolá http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999
Kde jinde bych si ty hodnoty měl přečíst?
V té mé předchozí variantě, kde jsem testoval ty pole a tlačítko se mi to v tom vypsalo a mohl jsem s tím pracovat.
Já přeci to lokace.php volám s těmi parametry, tak bych to tam měl mít a mít možnost s tím pracovat.
ten ajax v JS přeci zavolá http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999
22. zář 2015 13:31 - 22. zář 2015 13:38 #123510
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Odpověď od karel

Zkušený uživatel
zkusím napovědět více:
Proč ten AJAX je vlastně asynchronní?
Co to je to asynchronní?
Jaký je rozdíl mezi zavoláním stejné URL: http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999
- prohlížečem ?
- JS ?
, ano správně, ... a webový server provede, to co je v souboru definováno, ale je komu (jak) odpovědět? Kam/jak se má výsledek odeslat/zobrazit? Kdo vlastně ten soubor ze serveru požadoval a jak? (Vy to víte, já to vím, ale ví o tom prohlížeč, server ?)ajax v JS přeci zavolá http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999
Proč ten AJAX je vlastně asynchronní?
Co to je to asynchronní?
Jaký je rozdíl mezi zavoláním stejné URL: http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999
- prohlížečem ?
- JS ?
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Poděkovali: Ernst
22. zář 2015 13:47 #123511
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Odpověď od karel

Zkušený uživatel
Celý příklad i se zobrazením výsledku v jQuery:
api.jquery.com/jquery.post/
api.jquery.com/jquery.post/
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
22. zář 2015 14:56 #123515
Odpověď od Ernst
Joomla Expert
zkusím odzadu
Když napíšu do prohlížeče http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999 tak mi var_dump ty hodnoty v php vypíše.
Když to zavolá ajax z JS neděje se nic. Proč to nevím.
Já se to snažil pochopit dle jquery-navod.cz/kategorie-ajax/9-ajax a jaknajquery.cz/ajax-a-jquery/
ten příklad, co jste mi poslal Vy nějak nechápu.
Když jsem zkoušel ten pokus se zadáním jména (příspěvek z 20.9. 22:52) tak jsem v tom lokace.php mohl s proměnnými pracovat a chápal jsem, jak to je.
Tenhle způsob tedy nějak nejsem schopen pochopit
Kde co blbě chápu? jak to tedy mám udělat?
Když napíšu do prohlížeče http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999 tak mi var_dump ty hodnoty v php vypíše.
Když to zavolá ajax z JS neděje se nic. Proč to nevím.
Já se to snažil pochopit dle jquery-navod.cz/kategorie-ajax/9-ajax a jaknajquery.cz/ajax-a-jquery/
ten příklad, co jste mi poslal Vy nějak nechápu.
Když jsem zkoušel ten pokus se zadáním jména (příspěvek z 20.9. 22:52) tak jsem v tom lokace.php mohl s proměnnými pracovat a chápal jsem, jak to je.
Tenhle způsob tedy nějak nejsem schopen pochopit
Kde co blbě chápu? jak to tedy mám udělat?
22. zář 2015 15:11 #123518
Jak to máte udělat? A co vlastně chcete? Chcete uživateli vypsat jeho GPS souřadnice? Pokud vím tak ne. Vy je chcete přeci uložit do databáze. Tak proč probůh řešíte, že se Vám nikde nevypisujou, prostě je uložte do databáze a pak se na ně můžete dívat v databázi.
Pokud chcete uživateli ukazovat zpětnou vazbu o tom, že se informace uložila (ale to asi ne, nebudete nikomu přeci říkat jak ho šmírujete), tak to musíte pořešit ve funkci done toho javascriptu co jsem psal.
Odpověď od Cony

Moderátor
Blbě chápete celý princip fungování Javascript, AJAX, PHP atd..ernst napsal: Kde co blbě chápu? jak to tedy mám udělat?
Jak to máte udělat? A co vlastně chcete? Chcete uživateli vypsat jeho GPS souřadnice? Pokud vím tak ne. Vy je chcete přeci uložit do databáze. Tak proč probůh řešíte, že se Vám nikde nevypisujou, prostě je uložte do databáze a pak se na ně můžete dívat v databázi.
Pokud chcete uživateli ukazovat zpětnou vazbu o tom, že se informace uložila (ale to asi ne, nebudete nikomu přeci říkat jak ho šmírujete), tak to musíte pořešit ve funkci done toho javascriptu co jsem psal.
Code:
...
}).done(function(data){
console.log('Odesláno');
console.log('Odpověďd');
console.log(data);
}).fail(function(){
...
22. zář 2015 15:18 #123520
Odpověď od Ernst
Joomla Expert
ne já je nepotřebuji uložit do databáze.
potřebuji je dostat do php (jako aktuální pozici) a v tom spočítat vzdálenost od jiných souřadnic. To vše v php již umím.
Vypisovat je nikde nechci, to var_dump() si tam dávám jen pro ladění, v podstatě abych věděl, kde co mám.
To znamená potřebuji souřadnice dostat do proměnných v php
potřebuji je dostat do php (jako aktuální pozici) a v tom spočítat vzdálenost od jiných souřadnic. To vše v php již umím.
Vypisovat je nikde nechci, to var_dump() si tam dávám jen pro ladění, v podstatě abych věděl, kde co mám.
To znamená potřebuji souřadnice dostat do proměnných v php