Mennyire egészséges? jQuery php class
Úgy gondoltam, megkönnyíteném a saját dolgomat és írok egy osztályt az ajax kérések egyszerűsítésére. A kérdésem az lenne, hogy mennyire egészséges ilyen formában megvalósítani.
A kód:Használat:Ez egy nagyon egyszerűsített változat, nyílván escape stb. nincs benne, mert ezt csak egy teszt. Milyen megoldást javasoltok, ha ez nem helytálló?
Üdv!
■ A kód:
class jQueryAjaxSubmits{
function jQueryAjaxPostInit($data, $url, $formname="Ajax", $setTimeout="2000", $ResponseFunc){
$s='<script type="text/javascript">
$(document).ready(function() {
'.$formname.'Form();
function '.$formname.'Form() {
$("#waitpopup").remove();
$("#'.$formname.'Form").submit(function(){
'.$this->jQueryAjaxWaitPopUp().'
setTimeout(request, '.$setTimeout.');
});
'.$this->jQueryAjaxRequest($url, $data).'
}
}
);
function ClosePopup(){
$("#waitpopup").remove();
}
</script>';
return $s;
}
function jQueryAjaxWaitPopUp(){
$s="var popupdiv='<div id=\"waitpopup\" style=\"display:none;\">'
+'<div id=\"popupwait\">'
+'<p>Please wait...</p>'
+'</div>'
+'</div>';
$(\"body\").append(popupdiv);
$('#waitpopup').css(\"top\", ( $(window).height() - $('#waitpopup').height() ) / 2+$(window).scrollTop() + \"px\");
$('#waitpopup').css(\"left\", ( $(window).width() - $('#waitpopup').width() ) / 2+$(window).scrollLeft() + \"px\");
$('#waitpopup').fadeIn(800);";
return $s;
}
function jQueryAjaxRequest($url, $data){
$s="function request() {
$.post(\"".$url."\",{
".$this->jQueryAjaxPostVals($data)."
rand:Math.random() } , function(data){
var newhtml='<div id=\"newhtml\" style=\"display:none;\">'+data+''
+'<div style=\"margin: 0 auto; background-color: #lime; width:200px; height: 20px;\" onclick=\"ClosePopup()\">Close</div>'
+'</div>';
$(\"#waitpopup\").html(newhtml);
$(\"#newhtml\").fadeIn(800);
});
}";
return $s;
}
function jQueryAjaxPostVals($data){
foreach($data as $key=>$opt){
$a.=$key.':$("#'.$opt.'").val(),';
}
return $a;
}
}
if(!isset($_POST['asdasd'])){
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<link rel="stylesheet" type="text/css" href="/s.css" />
<script type="text/javascript" src="/js/jquery.js"></script>
</head>
<body>
<?php
$ajax=new jQueryAjaxSubmits;
echo $ajax->jQueryAjaxPostInit(
array(
'asdasd'=>'asdasd',
'dsadsa'=>'dsadsa'
), '/a', "Ajax", $setTimeout="2000", $ResponseFunc);
?>
<div style="background-color: green;">
<form method="post" id="AjaxForm">
<p><input type="text" name="asdasd" id="asdasd" value="" /></p>
<p><input type="text" name="dsadsa" id="dsadsa" value="" /></p>
<div style="margin: 0 auto; margin-top:5px; width: 99px; background-color: #red;" onclick="$('#AjaxForm').submit();">Elküld</div>
<input name="submit" type="submit" style="display:none" />
</form>
</div>
</body>
</html>
<?php
}else{
echo '<div>'.$_POST['asdasd'].' - '.$_POST['dsadsa'].'</div>';
}
?>
Üdv!
Működés közben itt tekinthető
Felesleges
onclick
is teljesen rossz. Ha ugyanis nem kattintok az Elküld gomra, akkor teljesen más történik, mintha csak pusztánEnter
-t nyomnék valamelyik mezőben. Valamint billentyűzettel nem is tudok ráfókuszálni az Elküld mezőreTab
gomb segítségével, ami nagyon frusztráló.Ráadásul az egyik leglényegesebb dolog van elrontva benne, mégpedig az egyes rétegek elkülönülése.
Kérdés, hogy mi volt ezzel a
Én elvből kerülöm, hogy pl. a php generáljon js-t.. Persze van, amikor elkerülhetetlen, de ez az eset nem tartozik azok közé.
Szerintem az első kérdés, hogy miért így akarod megoldani? (már mint php osztályként, miközben js osztályként is bőven elegendő lenne és legalább nem "szemetelné" a html kódod)
UPDATE: látom Poetro-nál működik az "autoreply" .. :)
Erre voltam kíváncsi.
Javascriptben hogy gondoljátok?
pl.:
JavaScript
form
-nak egyajax
osztályt)Bocsánat, hogy nem reagáltam
Nos megnéztem amit ajánlottál és a következőre jutottam.
Mivel több form lehet egy oldalon, ezért mindenképpen php-ból kell átadnom a formok id-jét.
A következőre gondoltam. Csinálok egy ajax.js.php-t, amelyet majd beszúrok a formok elé javascriptként.
Miért?
ID
-jét? Elvégre nem csak ID alapján lehet megtalálni aform
-ot, valamint atarget
-et is megadhatod aform
action
attribútumaként.Végülis, jogos. Nem tudom
Nah most már megvan, működik minden tökéletesen. Köszönöm az észheztérítést :)
A kész megoldás itt van:
Több formal is működik tökéletesen.