předání dat z javascript do PHP

Odpověď od Ernst
22. zář 2015 15:37 #123525
když ji budu mít v php, tak ji dám jako parametr do funkce, která mi zobrazuje třeba restaurace (jejich pozice je v databázi).
Nyní se mi tam posílá moje uložená pozice, která je uložena v databázi, tedy když se přemístím, ukazuje to pořád tu původní vzdálenost
Ještě pak musím vyřešit jak ty hodnoty dostat na správné místo v php v modulu

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
22. zář 2015 15:41 #123526
to karel0 Asi se špatně vyjadřuji, ale potřebuji to hodnoty poslané v parametru přečíst v php (tedy ne vložit do PHP)

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od karel
22. zář 2015 15:41 - 22. zář 2015 15:42 #123527
Musíte hlavně vyřešit které termíny budete používat, jinak to bude pořád těžká debata.

A už jste pochopil, jak funguje AJAX ?

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ě.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
22. zář 2015 15:50 #123528
jestti to chápu dobře (čímž si nejsem jistý)
tak zavolám JS
$document = &JFactory::getDocument();
$document->addScript('/components/com_lovefactory/models/lokace.js');
mezitím to php skončí a provádí se javascript.
Parametry a funkce ajaxu umím, ale nikde to není vysvětleno jak pro blbý. Myslel jsem si, že
jQuery.ajax({url: '/components/com_lovefactory/models/lokace.php',
data: {lat: position.coords.latitude, lgt: position.coords.longitude,}

Zavolá to php se zadanými parametry a to to provede, ale tak to zjevně není.
asi to musím řešit v tom .done(function(), ale to v tuhle chvíli nevím jak.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
22. zář 2015 17:00 #123529
ano, můžu si ty výsledky vypsat do konsole, ale to mi asi nijak nepomůže.
Je na tohle vůbec ajax vhodný?
není lepší použít jen jQuery.post?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od karel
22. zář 2015 17:52 - 22. zář 2015 17:53 #123530
Co je vhodné a co není, se dá doporučit až na základě popisu "uživatelského zacházení" (případu užití).

PHP nikam neskáče. PHP se zpracuje na serveru CELÉ (vznikne z něj HTML, někdy se k němu připojí i různé soubory, třebaže JS), a pokud je komu (existuje druhý konec trubky ), odešle se.
JS je (tak abyste pochopil) jsou "jen činnosti", provedené na straně prohlížeče .
Pokud v JS něco se provádí, provádí se to na straně prohlížeče.
Pokud JS má zavolat URL, zavolá, ale pokud mu to neřeknete, nic víc s tím nedělá.
Pokud JS má načíst obsah volané stránky (načte ale připravená data! (HTML, nebo jiný výsledek které připraví webový server na základě zpracovaného PHP), musíte to v JS napsat, třeba: vole.načti_to_co_připravilo_php.("na_této_URL");
Pokud se na již zobrazené HTML stránce má něco změnit bez ZNOVUNAČTENÍ, musí to udělat JS (změnit HTML) na straně prohlížeče, jinak se musí stránka načíst znovu, s jiným HTML. A pokud to má udělat JS, opět: musíte mu napsat kde to má změnit a jak.

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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
22. zář 2015 18:53 #123532
to že php pracuje na straně serveru js na straně klienta je mi jasné od počátku. právě proto, že lokaci nezjistím nikde jinde než na straně klienta musím použít js.
že se prvně zpracuje php a pak se vlastně provede ten js je mi také jasné.
znovunačtení není potřeba, protože výsledek se zobrazuje na úplně jiné stránce.

popis, co to má dělat jsem psal.

Potřebuji do již zakoupeného modulu dodat možnost zjištění svojí reálné vzdálenost od jiného objektu (který má lokaci uloženou v databázi)

Snažím se na to přijít sám, ale přečetl jsem si spoustu příkladů a manuálů (většinu jsem tady odkazoval)
jak ale mám dostat ty hodnoty do proměnných v PHP a dále s nimi pracovat.

Uvádím několik odkazů, kde to je popsáno, ale nedokážu to implementovat na tento příklad:
api.jquery.com/jquery.post/
stackoverflow.com/questions/28641438/aja...ent45582257_28641686
www.pehapko.cz/zakladni-kurz/15-php-a-javascript
a mnoho dalších

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
22. zář 2015 18:56 #123534

ernst napsal: Je na tohle vůbec ajax vhodný?
není lepší použít jen jQuery.post?

:lol: Zkoušel jste alespoň do dokumentace nahlédnout? Nadpisek Ajax > Shorthand Methods a hned první věta pod tabulkou pramaterů "This is a shorthand Ajax function, which is equivalent to:"

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
22. zář 2015 19:06 #123536
Tedy postup
1/ Uživatel otevře jakousi stránku - to spustí u Vás na Serveru PHP, ve kterém, krom jiného, vložíte do HTML javascript, který provede asynchronní volání
2/ javascript se na klientovi spustí a zavolá pomocí AJAX nějakou adresu na serveru. Ta spustí PHP skript, který zpracuje zaslané parametry a vytvoří nějaký výstup
3/ klient obdrží odpověď na svůj dotaz a odpověď zobrazí jak je libo.

Vy nehledáte příklady, ale naprosto konkrétní řešení. Nahraďte si console.log(data) za jQuery('#results').html(data); tedy javascript naprosto konkrétně
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(data){
				jQuery('#results').html(data);
			}).fail(function(){
				jQuery('#results').html('AJAX selhal');
			});
		}, function(error){
			jQuery('#results').html(error.message);
		});
	}
});

Samozřejmě za předpokladu, že v HTML máte někde prvek s ID results, tedy něco jako <div id="results"></div> (popř si jej doplňte v kroku 1).
Poděkovali: Ernst

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
22. zář 2015 20:56 #123538
Děkuji Vám mnohokrát, bez Vás bych to nedal.
nepředpokládal jsem, že tyhle věci budu potřebovat. Ze zadání to vypadalo, že nakonfiguruji joomlu nakonfiguruji a v css upravím love factory a doplním další moduly.
Zákazník si však vymyslel různá rozšíření v love factory, propojení modulů atd.
Troufnu si tvrdit, že joomlu css a php umím obstojně, ale OOP, asynchronní volání, js atd bylo pro mně do konce srpna španělskou vesnicí. Normálně bych to vzdal, ale chci se to naučit tak jsem skočil do vody, přestože neumím plavat.
Dříve jsem napsal podvojné účetnictví, SW pro sledování provozu telefonních ústředen, specializovaný SW pro vývoz dřeva, skladové hospodářství atd.
To ale bylo "klasické" staré programování většinou v clipperu. Z toho teď mohu obstojně vycházet v php, zvlášť kdyby ten modul nebyl napsán objektově.

Teď jdu s tím, co jste mi většinou napsal Vy experimentovat, zkoušet různé varianty, prostě si osahat, co kde jak dělá.
Tím to pochopím a mohu to aplikovat na jakýkoliv případ ajaxu a vůbec komunikace mezi PHP a JS.

Musím ještě vymyslet, jak ty hodnoty dostat do požadované funkce v tom php, kam jsem ten js přidal.
Dokonce je možná varianta, že to opravdu zapíšu do databáze, ale nepovažuji to za nejvhodnější řešení.
Musím zkusit, co se stane, když z JS zavolám to php, ze kterého jsem ho volal.

Také potřebuji, aby se ta poloha automaticky aktualizovala. Samozřejmě stačí aktualizace stránky (ta se dá udělat i automaticky) nebo do toho js doplnit něco takového: navigator.geolocation.getCurrentPosition(showLocation, errorHandler, {enableHighAccuracy:false, maximumAge:60000, timeout:27000});
Ale to nevím, jak by se chovalo.

Je mi trapné, že mi takhle pomáháte zadarmo, pokud chcete nějaké peníze, napište mi.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
22. zář 2015 21:36 #123539

ernst napsal: zvlášť kdyby ten modul nebyl napsán objektově.

No jo, ale objektově se programuje už minimálně 20 let :) Už od dob prvních C++ nebo Delphi. V PHP byly objekty od verze 3, z roku 1998. Bez objektového programování se dnes obejdete snad jen v makrech v excelu :)

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
22. zář 2015 22:33 #123540
No jo, ale já svý první programy napsal cca v roce 1985. :)

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
22. zář 2015 22:53 #123542
No tak to jste měl na objekty dost času :P

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
22. zář 2015 23:55 #123544
ano, v jisté době jsem zakrněl a teď to doháním :oops:
Začínám se klonit k řešení, zapsat ty hodnoty do databáze.
Ale potřebuji id nebo username přihlášeného uživatele.
Jak to z modulu dostanu do toho lokace.php? Mohu přidat do toho JS nějakou hodnotu , kterou pošlu do lokace.php?
asi to tam poslat jako skryté políčko s touto hodnotou?

Pokud z toho JS volám nějaké PHP z modulu, třeba z toho kde jsem js načetl, tak ty hodnoty nenačtu. To jsem ale zatím nezkoušel dál, dal jsem tem jen $global_lat = $_REQUEST. ale tam musím najít, zda mi tam něco nechybí, či kde mám číst (hned na začátku PHP , ve třídě, v konstruktoru atd.)

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
23. zář 2015 09:45 #123545
Už toho na mně bylo včera asi dost.
Nemusím si přeci username nikam posílat, stačí v lokace.php dát:
$user = JFactory::getUser()->username;

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.