将对象从JS传递给PHP并返回

时间:2010-03-22 14:42:23

标签: php ajax xpath javascript

这是我认为无法做到的事情,或者不能轻易做到的事情。

想想这个,你在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作为主体,有很多页面同时打开,很多身体)。如果你到达一个元素,你总是知道该元素的父元素是谁。

1 个答案:

答案 0 :(得分:1)

许多JavaScript库使用#1的形式。你应该检查一下有很多好的库来开始:jQuery,prototype,mootools等。这个问题在之前已经解决了..