Diskuze: Komunikace mezi 2 PHP.
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 21 zpráv z 21.
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
V JS to nepůjde, zkus v PHP include.
<?php include("data.php"); ?>
On zrejme chce načítať ten druhý súbor až neskôr po nejakej akcii zo
strany používateľa a to s include nevyrieši
Tak to může vyřešit pomocí podmínek a include();
if(...) {
include('data.php');
}
Tak jinak.
<?php
$register_GPA = `sudo i2cget -y 1 0x20 0x13`;
echo $register_GPA;
?>
Takto mi to načte data s registru a vypíše přes PHP.
Já to však potřebují strčít v JS do timeru.
Jak jsem tak patral, tak jediný způsob je vytvořit si třeba
index.php.
Do něho dat JS.
A v něm přes ajax zavolat přes post ten první PHP a přenést tuto
hodnotu.
Pokud nepotřebuješ posílat ze stránky (která bude přes js volat tu druhou) žádná data, tak můžeš použít normálně get. jQuery má krásnou metodu na ajaxové volání stránky, mrkni tady: http://api.jquery.com/jquery.ajax/
Kluci poraďte.
Nikdy jsen v PHP, JS a ajaxu nedělal.
Náhodou mi jeden známy daroval RasPi a já zkouším.
Našel jsem asi to co potřebují.
http://www.w3schools.com/…ajax_php.asp
Trochu tuším jak to funguje, ale asi sem si něco přised.
Upravím PHP File
<?php
$q=$_REQUEST["q"]; $hint="Test";
echo $hint;
?>
Když zadám do First name cokoliv, vypiše mi to Test.
Nevím však jak na tem JS v HTML.
Rad bych zrušil celou funkcí.
Prostě aby hned při spuštění stránky se hodnota té proměnné načetla v
JS.
Já moc nevím, co se snažíš udělat Jestli jsem to dobře pochopil -
chceš do prvního souboru dosadit hodnotu do proměnné pomocí js z druhého
souboru - tak to není možné. Pokud to myslíš jinak, tak ti nerozumím.
Ideálně sem pošli všechny soubory a řekni nám znovu, co chceš udělat (ne
jak, ale co).
Už jsem to tu psal.
<?php
$register_GPA = `sudo i2cget -y 1 0x20 0x13`;
echo $register_GPA;
?>
Toto mi při spuštění načte hodnotu s registru v linuxu.
Ja je však nechci načítat jen jednou při spuštění, ale dat to do JS a do
timeru.
Aby se to aktualizovalo.
Moc jsem to nečetl, ale mohlo by ti pomoct něco jako tohle:
<script>
function aktualizace()
{
$.get("stranka_ktera_vypise_hodnotu_registru.php", function(hodnota) {
$("#nejakyElement").html(hodnota);
})
}
window.setInterval("aktualizace", 10000);
</script>
Píšu to z hlavy, takže nevim, jestli to bude fungovat. Navíc bys na to
musel mít knihovnu jQuery (v čistým JS by to bylo o pár řádků
delší).
V podstatě by tenhle kód měl udělat to, že se každých 10 sekund (10000
milisekund) pošle požadavek na soubor
stranka_ktera_vypise_hodnotu_registru.php
, jehož odpověď (text
vypsaný pomocí echo
) se uloží do proměnné
hodnota
, kterou už pak můžeš kdekoliv zobrazit.
Jestli to dobře chápu (a jsem si tím téměř na 100% jist), má Martin v podstatě pravdu, ale toto je asi to co chceš: (je to v JQuery, jelikož v čistém JS to nehodlám dělat)
function vezmiHodnotu(element) {
$.post('cesta_k_souboru_php.php',
value: element,
function(result) {
VysledekZeSouboru = result; //není potřeba, jen když třeba chceš vědět jestli to vyšlo
}
);
}
setTimeout(function(){
elHodnoty = $("span.hodnota");
vezmiHodnotu(elHodnoty);
}, 10000); //za 10s se to spustí
Teoreticky by to mělo fungovat, píšu to také z hlavy, takže tu není 100% jistota, ale mělo by to fungovat.
Děkují moc - vyzkouším.
je to v JQuery, jelikož v čistém JS to nehodlám dělat
Nelenil jsem a zkoušel to řešení co je na te strance co jsem tu dal.
http://www.w3schools.com/…ajax_php.asp
Ta PHP stranka by měla byt nšjak tako.
<?php
$q=$_REQUEST["q"]; $hint=sudo i2cget -y 1 0x20 0x13;
echo $hint;
?>
Se strankou s JS jsem take zkoušel.
<html>
<head>
<script>
function showHint(str) {
document.getElementById("txtHint").innerHTML="";
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","gethint.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
First name: <input type="text" onkeyup="showHint(this.value)">
</form>
<p><span id="txtHint"></span></p>
</body>
</html>
Jen se ještě trochu trapím.
Třeba zrušit tu http čast a tu proceduru volat přimo v JS a ne přes
input
Poradite.
Tak to je opravdu AJAX
Viděl bych to nějak takto:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript">
setInterval(function()
{
$("semToVypis").load('/cesta/k/souboru.php');
}, 1000);
</script>
</head>
<body>
<div id="semToVypis"></div>
</body>
</html>
Tohle ti bude každou sekundu vypisovat obsah souboru soubor.php do divu #semToVypis
Nějak to nefunguje.
Tady je soubor který volám.
<?php
$q=$_REQUEST["q"]; $hint=`sudo i2cget -y 1 0x20 0x13`;
echo $hint;
?>
Tady je to s čím jsem si hral a zkušel.
<html>
<head>
<script>
function showHint(str) {
document.getElementById("txtHint").innerHTML="";
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","gethint.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
First name: <input type="text" onkeyup="showHint(this.value)">
</form>
<p><span id="txtHint"></span></p>
</body>
</html>
Je to funkční.
Když něco napišu do inputu vypiše mi to ten obsah registru.
A tu to co tu dal p.Vítek
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script type="text/javascript">
setInterval(function()
{
$("semToVypis").load('gethint.php');
}, 1000);
</script>
</head>
<body>
<div id="semToVypis"></div>
</body>
</html>
$("semToVypis").load('gethint.php');
U toho ti chybí znak #, což znamená v jQuery ID elementu.
$("#semToVypis").load('gethint.php');
děkují všem.
Ještě poslední.
Jak dostanu tu staženou hodnotu s Query ID elementu?
Nechci to vypisovat na stanku ale zpracovat.
Asi nějak takto, ale nefunguje to.
setInterval(function()
{
$("#semToVypis").load('gethint.php');
text = #semToVypis;
document.write(text);
}, 1000);
Tak můžeš udělat něco ve smyslu
var text = $("#semToVypis").html();
Ale pokud to chceš zpracovávat, spíš bych na to použil metodu $.get() než $.load().
Klucí, děkují moc.
Ale pokud to chceš zpracovávat, spíš bych na to použil metodu $.get() než $.load().
No jsem rad že jste mi tady pomohli s tým load a že jsem to vůbec
rozchodil.
Nevím zda jste to tady čet.
Nemam nic společného s programováním.
Dostal jsem Rasberry pi a snažím se ho ovladat přes web rozhraní.
Stejnak vím že mně nemíné se naučit alespoň základy, ale zatím si
hrají
Nazdar kluci.
Už mi s toho začíná hrabat.
To k čemu jsme tu tak pracně dospělí funguje.
Spokojen.
<script type="text/javascript">
setInterval(function()
{
$("#semToVypis").load('gethint.php');
var text = $("#semToVypis").html();
}, 1000);
</script>
Mam však ve stejném adresáři další skript.
zap_GPA0.php
Když to strčím do prohlížeče, zapne se mí pin GPA0.
Snažím se ho spustit stejným způsobem a nejde to.
$("#test").load('zapGPA0.php');
Zkoušel jsem i toto.
$("#test").load("'zapGPA0.php'?pin=1");
Así musí byt v tom souboru, co volám nějaká návratová hodnota, že,
aby to fungovalo.
Nebo zas jsem něco posmolil.
Jde to vyřešíte bez ní?
Zobrazeno 21 zpráv z 21.