Diskuze: AJAX
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 18 zpráv z 18.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí JavaScript, jsme si ověřili nabyté zkušenosti z kurzu.
ahoj, brzy se tu o tom objeví článek, ale v podstatě základ máš dobrý. Karlův chat se to dozví tak, že v krátkém (pro počítač dlouhém) intervalu (třeba 1s) posílá na server požadavek jestli je nová zpráva a pokud je, tak ji zobrazí. Chaty se ale řeší pomocí WebSocket, kde se odstraní ten problém požadavků každou sekundu.
OK dejme tedy jiný příklad... třeba anketa... Když já jako uživatel kliknu na jednu z možností, přes AJAX se to odešle na server a mě se překresli graf... Zajímalo by mě, jestli jinému uživateli, který má již stránku načtenou před mým hlasováním, se změní graf také bez obnovení stránky
Pořád by stránka jiného uživatele musela třeba tu každou 1s posílat požadavek na server. Nefunguje to tak, že ty něco uděláš, a v tom okamžiku to zaznamená i druhý uživatel, bohužel, na to bys musel použít ty WebSockets.
AJAX není zázrak, funguje to úplně stupidně. Všechny požadavky, které si ty fyzicky v tom scriptu pošleš se zpracují, nic víc se samo dělat nebude. Nic se nebude aktualizovat, nic se nebude překreslovat, prostě v JavaScriptu se zázraky nedějí (ačkoliv při výpisu některých chyb Googlem Chrome si to občas myslím). Pokud chceš mít něco aktuální, tak si to musíš sám aktualizovat (v nějakém intervalu).
Nejprve, ale zvaž, jestli je to fakt potřeba. Nepředpokládám, že bys měl tak frekventovanou anketu.
No už vím jak na to, jen nechápu proč někdo používá u toho AJAXu GET a někdo POST... v PHP to chápu (GET-zobrazí se v URL, POST-nezmění URL a provede se na pozadí), jenže u AJAXu to URL nezmění
parametry v URL nesouvisí s metodou. GET jenom říká, že požadavek nemá žádný obsah a POST říká, že tam obsah bude. Obsah se předává v metodě send. Pokud obsah nemáš, posíláš GET a můžeš si tam napsat URL s parametry, pokud obsah máš, tak posíláš GET obsah a parametry v URL samozřejmě mít můžeš.
Ahoj, tak jsem to vyzkoušel v praxi, ale zdá se mi, že se stránka stejně načítá znovu Ale data se mi do DB uloží. Nevíš, kde je chyba?
index.php
<!DOCTYPE HTML>
<html>
<head>
<title>AJAX</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
$(document).ready(function(){
$("#saveBtn").click(function(){
var email = $("#exampleInputEmail").val();
$.ajax({
url: "indata.php",
method: "GET",
success: function(data){
alert("Success");
}
});
});
});
</script>
</head>
<body>
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="text" class="form-control" id="exampleInputEmail" placeholder="Enter email">
</div>
<button id="saveBtn" class="btn btn-default">Submit</button>
</form>
</body>
</html>
indata.php
<?php
$email = $_GET['email'];
$con = mysql_connect('sql.endora.cz:3313','hypnoz','heslo');
mysql_select_db('sindy', $con);
$query = mysql_query("insert into ajax values('$email')");
?>
Ahoj,
pokud se ti stránka načítá znovu, tak asi je to blbost, ale zkus vyhodit tag
form. Nevim, jestli má klasický button stejnou fci jako submit button, ale
pokud jo, mohlo by to být kvůli tomu.
Ještě možná zkusit hodit
<form onsubmit="return false;">
// omlouvám se za double post, prosím smazat
Tak problém byl opravdu v return false:
<script>
$(document).ready(function(){
$("#saveBtn").click(function(){
var email = $("#exampleInputEmail").val();
$.ajax({
url: "indata.php?email="+email,
method: "GET",
success: function(data){
alert("Success");
}
});
return false;
});
});
</script>
jen ještě nechápu, proč se za url musí napsat ten otazník a email:
$.ajax({
url: "indata.php**?email="+email**,
Tak už jsem to asi pochopil
<!DOCTYPE HTML>
<html>
<head>
<title>AJAX</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
$(document).ready(function(){
$("#saveBtn").click(function(){
var email = $("#exampleInputEmail").val();
$.ajax({
url: "indata.php",
data:"email="+email,
method: "POST",
success: function(data){
alert("Success");
$("#exampleInputEmail").val("");
}
});
return false;
});
});
</script>
</head>
<body>
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="text" class="form-control" id="exampleInputEmail" placeholder="Enter email">
</div>
<button id="saveBtn" class="btn btn-default">Submit</button>
</form>
</body>
</html>
Za otazníkem jsou předané parametry stránce, tzn. když napíšeš
pozdrav.php?osloveni=Karle&nalada=fajn
potom to můžeš v PHP zpracovat následujícím způsobem
echo 'Vítám tě ' . $_GET['osloveni'] . ' dnes se máš ' . $_GET['nalada'];
Tak mám hotovou aplikaci na ukládání a čtení dat pomocí AJAXu. Chci se zeptat, zda je zápis 100% správně včetně použití POST a GET u AJAXu. Dále se chci zeptat, jaký je rozdíl mezi WebSocketem a voláním funkce každou sekundu.
index.php
<!DOCTYPE HTML>
<html>
<head>
<title>AJAX</title>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script>
$(document).ready(function(){
$("#Save").click(function(){
if ($("#Input").val()==="")
return false;
var text = $("#Input").val();
$.ajax({
url: "indata.php",
data:"text="+text,
method: "POST",
success: function(data){
alert("Success");
$("#Input").val("");
}
});
return false;
});
setInterval(function(){
$.ajax({
url: "outdata.php",
method: "GET",
success: function(data){
if($("p").text()!==data)
$("p").text(data);
}
});
return false;
}
,1000);
});
</script>
</head>
<body>
<form>
<div class="form-group">
<input type="text" class="form-control" id="Input" placeholder="Enter text">
</div>
<button id="Save" class="btn btn-default">Save</button>
<p></p>
</form>
</body>
</html>
indata.php
<?php
$text = $_POST['text'];
$con = mysql_connect('sql.endora.cz:3313','hypnoz','');
mysql_select_db('sindy', $con);
$query = mysql_query("INSERT INTO tabulka(data) values('$text')");
?>
outdata.php
<?php
$con = mysql_connect('sql.endora.cz:3313','hypnoz','');
mysql_select_db('sindy', $con);
$query = mysql_query("SELECT data FROM tabulka ORDER BY id DESC");
echo mysql_result($query, 0);
?>
ONLINE: http://webgl.8u.cz/
Mohl by si mi to prosím zkontrolovat, ať to tu můžu uzavřít? Děkuji
Mohl by si mi to prosím zkontrolovat, ať to tu můžu uzavřít? Děkuji
Zobrazeno 18 zpráv z 18.