Přihlásit se

Joomla 5.1.0 a Joomla 4.4.4 (17 dub 2024)

Dnes byla uvolněna nová verze Joomla 5.1.0, společně s Joomla 4.4.4. Tato verze přináší spoustu nových funkcí, vylepšení v oblasti bezpečnosti a kódu a díky těmto vylepšením i vyšší rychlost.

předání dat z javascript do PHP

21. zář 2015 00:10 - 21. zář 2015 00:10 #123490
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.

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?

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
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?

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á

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?

Powered by Fórum