Přihlásit se

předání dat z javascript do PHP

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?

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

22. zář 2015 12:09 #123508
Odpověď od Cony
Moderátor

ernst napsal: ano kontroloval, vše OK
Myslím, že by se to mělo vypsat v tom PHP

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

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

22. zář 2015 13:31 - 22. zář 2015 13:38 #123510
Odpověď od karel
Zkušený uživatel
zkusím napovědět více:

ajax v JS přeci zavolá http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999

, 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 ?)
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
Odpověď od karel
Zkušený uživatel
Celý příklad i se zobrazením výsledku v jQuery:
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?

22. zář 2015 15:11 #123518
Odpověď od Cony
Moderátor

ernst napsal: Kde co blbě chápu? jak to tedy mám udělat?

Blbě chápete celý princip fungování Javascript, AJAX, PHP atd..
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

22. zář 2015 15:24 - 22. zář 2015 15:26 #123521
Odpověď od karel
Zkušený uživatel
aneb:
Když vložíte http://localhost/components/com_lovefactory/models/lokace.php?lat=50.0373925&lgt=14.309066399999999 :
-- do prohlížeče, tak Vám zobrazí odpověď automaticky (na to je stavěný: něco požadujete ze serveru, server pošle prohlížeči HTML, vygenerované na serveru, pomocí PHP))
-- když zavoláte pomocí JS stejnou URL, a __nechcete_a_neočekáváte_odpověď __ ( done(function...), .fail(function()), tak si server zpracuje to co má (včetně všemožných chyb)), a zahodí, pokud ten výsledek "nikdo" nechce)


Pořád si pletete "vložit do php" a "zobrazit uživateli"
vložit do PHP by znamenalo, že pomocí JS chcete měnit soubory na serveru, a to asi nechcete, ne?

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 15:30 #123523
Odpověď od Cony
Moderátor

ernst napsal: 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.

A dál? Co s tou vzdáleností?

22. zář 2015 15:34 #123524
Odpověď od karel
Zkušený uživatel
imho (asi) zobrazit nejbližší ...

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

Powered by Fórum