Bu benim yapılamaz sanmıyorum şeydir, ya da kolay yapılamaz.
Eğer, AJAX üzerinden bir php işlevi çağırmak tıkladığınızda, bu düşünmek, Sen HTML bir div içinde bir düğme var, ben PHP click olayı (ya da bir parametre olarak herhangi bir öğeyi) başlangıç elemanını göndermek istiyorum ve GERİ JS tekrar, JS elemanını geri edebilmek için PHP serialize (), gibi bir şekilde.
Sana basit bir örnek vereyim:
PHP:
function ajaxCall(element){
return element;
}
JS:
callbackFunction(el){
el.color='red';
}
HTML:
<div id="id_div">
<input type="button" value="click Me" onClick="ajaxCall(this, callbackFunction);" />
</div>
3 yöntemleri Yani şey
method 1. I can give each element in the page an ID. so the call to Ajax would look like this:
ajaxCall(this.id, callbackFunction);
ve geri arama fonksiyonu olacaktır:
document.getElementById(el).color='red';
Büyük bir sayfa tüm kimlikleri takip etmek zor beacause bence bu yöntem, zor.
method 2. I think that using xPath could be done, If i can get the exact path of an element, and in the callback function evaluate that path to reach the element. This method needs some googling, it is just an ideea.
method 3. Modify my AJAX functions, so it retain the element that started the event, and pass it to the callback function as argument when something returns from PHP, so in my AJAX would look like this:
eval(callbackFunction(argumentsFromPhp, element));
ve geri arama fonksiyonu olacaktır:
callbackFunction(someArgsFromPhp, el){
el.color='red';
// parse someArgsFromPhp
}
Ben üçüncü seçeneği, bu denemeyi başlatmak için benim choise olduğunu düşünüyorum.
İçinizde bunu gerçekleştirmek için nasıl daha iyi bir fikri vardır?
Teşekkür ederim.
EDIT:
Önceki örnek karmaşık enougth değil, ben daha iyi bir açıklama bu sefer çalışacağız.
PHP:
function phpFunct($age){
$text='';
if(!is_numeric($age)){
$t['alert'] = 'You filled an invalid age !';
return $t;
}
// Can be lots of code ...
$text.='Your age is '.$age;
$t['#myDiv'] = $text;
return $t;
}
JS:
function callback(x){
for(i in x){
if(i == 'alert'){
// Alert if something went wrong.
alert(x);
} elseif(){
// ... more options, promts, console.log's ...etc
}else{
// Simple innerHTML
$(i).val(x);
}
}
}
phpFunct(){
x_phpFunct($('#age').val(), callback); //call PHP function via AJAX
}
HTML:
<div id="myDiv">
<input type="text" id="age" /><br />
<input type="button" value="getSomethingFromPhp" onCLick="phpFunct();" />
</div>
I would like to be able to do something like this: HTML:
onClick="phpFunct(this.parentNode);"
JS:
phpFunct(el){
x_phpFunct(el, $('#age').val(), callback);
}
PHP:
phpFunct($el, $age){
...
$t[$el] = 'Your age is '.$age;
return $t;
}
Bu, her eleman için bir kimliği varsa yapılır, ve PHP ve arka bu kimliği geçmek olabilir. Ben "yasal" değil biliyorum ama şimdi benim kimliği benzersiz değildir. Ben DIV içinde wrapers ve everithing benzersiz kimlikleri (vücudunda, bir sayfanın bir sürü aynı zamanda açmış, birçok bodyes olarak DIV bulunuyor kullanarak gibi) sahip olarak DIV bulunuyor kullanın. Ve sen hep o öğenin üst kim olduğunu bildiğiniz bir öğe ulaşır eğer.