这是我认为无法做到的事情,或者不能轻易做到的事情。
想想这个,你在HTML中有一个div内的按钮,当你点击它时,你通过AJAX调用php函数,我想发送启动click事件的元素(或任何元素作为参数)以PHP中的serialize()方式再次使用PHP和BACK到JS,以便能够在JS中恢复元素。
让我举个简单的例子:
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种方法
方法1。 我可以给页面中的每个元素一个ID。 所以对Ajax的调用看起来像这样:
ajaxCall(this.id, callbackFunction);
并且回调函数将是:
document.getElementById(el).color='red';
我认为这种方法很难,因为在大页面中很难跟踪所有ID。
方法2。 我认为使用xPath可以完成,如果我可以获得元素的确切路径,并且在回调函数中评估该路径以到达元素。这种方法需要一些谷歌搜索,它只是一个想法。
方法3。 修改我的AJAX函数,因此它保留了启动事件的元素,并在从PHP返回某些内容时将其作为参数传递给回调函数,因此在我的AJAX中看起来像这样:
eval(callbackFunction(argumentsFromPhp, element));
并且回调函数将是:
callbackFunction(someArgsFromPhp, el){
el.color='red';
// parse someArgsFromPhp
}
我认为第三个选择是我选择开始这个实验。
你们中谁都知道如何才能做到这一点?
谢谢。
修改
前面的例子并不复杂,这次我会尝试更好的解释。
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>
我希望能够做到这样的事情: 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;
}
如果您拥有每个元素的ID,并将该ID传递给PHP并返回,则可以执行此操作。我知道这不是“合法的”,但现在我的身份证并不是唯一的。我使用DIV作为包装和永恒的内部,DIV有唯一的ID(就像使用DIV作为主体,有很多页面同时打开,很多身体)。如果你到达一个元素,你总是知道该元素的父元素是谁。
答案 0 :(得分:1)
许多JavaScript库使用#1的形式。你应该检查一下有很多好的库来开始:jQuery,prototype,mootools等。这个问题在之前已经解决了..