PHP的AJAX框架(2)

时间: 2007-01-16 / 分类: 收藏推荐 / 浏览次数: 2,986 / 0个评论 发表评论
如何异步更新内容?
Xajax最富有特色的功能或许就是xajaxResponse类.
其他的Ajax库需要你自己编写JavaScript的回调句柄去处理一个异步请求返回的数据并更新内容.
xajax, 从另外一个角度来说, 允许你使用PHP简单的控制内容.
xajaxResponse 让你在PHP函数之中创建XML指令返回给你的程序.
XML将被xajax的消息分析器解析,指令将告诉xajax如何更新程序的内容和状态.
xajaxResponse类目前提供了以下指令:
How do I update my content asynchronously?
Perhaps the most unique feature of xajax is the xajaxResponse
class. Other Ajax libraries require you to write your own callback
handlers in JavaScript to process the data returned from an
asynchronous request and to update the content. xajax, on the other
hand, allows you to easily control your content from PHP. The
xajaxResponse class allows you to create XML instructions to return
to your application from your PHP functions. The XML is parsed by
xajax message pump and the instructions tell xajax how to update
the content and state of your application. The xajaxResponse class
currently offers the following commands:
addAssign($sTargetId,$sAttribute,$sData)
给命名为$sTargetId的元素的$sAttribute属性赋值$sData
$objResponse->addAssign(contentDiv,innerHTML,Some
Text);
$objResponse->addAssign(checkBox1,checked,true);
addAssign($sTargetId,$sAttribute,$sData)
Assigns the $sAttribute of the element identified by $sTargetId to
$sData
$objResponse->addAssign(contentDiv,innerHTML,Some
Text);
$objResponse->addAssign(checkBox1,checked,true);
addAppend($sTargetId,$sAttribute,$sData)
给命名为$sTargetId的元素的$sAttribute属性追加值$sData
$objResponse->addAppend(contentDiv,innerHTML,Some
Text);
addAppend($sTargetId,$sAttribute,$sData)
Appends $sData to the $sAttribute of the element identified by
$sTargetId
$objResponse->addAppend(contentDiv,innerHTML,Some
Text);
addPrepend($sTargetId,$sAttribute,$sData)
预备给命名为$sTargetId的元素的$sAttribute属性赋值$sData
$objResponse->addPrepend(contentDiv,innerHTML,Some
Text);
addPrepend($sTargetId,$sAttribute,$sData)
Prepends $sData to the $sAttribute of the element identified by
$sTargetId
$objResponse->addPrepend(contentDiv,innerHTML,Some
Text);
addReplace($sTargetId,$sAttribute,$sSearch,$sData)
替换命名为$sTargetId的元素的$sAttribute属性的值之中的$sSearch为$sData

$objResponse->addReplace(contentDiv,innerHTML,text,<strong>text</strong>);

addReplace($sTargetId,$sAttribute,$sSearch,$sData)
replaces all instances of $sSearch with $sData in the $sAttribute
of the element identified by $sTargetId
$objResponse->addReplace(contentDiv,innerHTML,text,<strong>text</strong>);

addClear($sTargetId,$sAttribute)
清空命名为$sTargetId的元素的$sAttribute属性的值
$objResponse->addClear(Input1,value);
addClear($sTargetId,$sAttribute)
Clears the $sAttribute of the element identified by
$sTargetId
$objResponse->addClear(Input1,value);
addCreate($sParentId, $sTagname, $sId, $sType)

在已经存在的命名为$sParentId的元素下添加一个名叫$sTagName的子元素,并且把他的id赋值为$sId,可选的类型赋值为
$sType.
$objResponse->addCreate(form1,input, pass,
password);
addCreate($sParentId, $sTagname, $sId, $sType)
Adds a new $sTagName child element to an existing element
identified by $sParentId, and assigns it the id $sId and the
optional type $sType.
$objResponse->addCreate(form1,input, pass,
password);
addRemove($sElementId)
从你的程序之中移除命名为$sElementId的元素
$objResponse->addRemove(div1);
addRemove($sElementId)
Removes the element identified by $sElementId from your
application
$objResponse->addRemove(div1);
addAlert($sMsg)
显示一个内容为 $sMsg 的警告框(JavaScript的Alert)
$objResponse->addAlert(This is some text);
addAlert($sMsg)
Display an alert box with $sMsg
$objResponse->addAlert(This is some text);
addScript($sJS)
执行JavaScript代码 $sJS (演示代码原文有误)
$objResponse->addScript(var txt = prompt(‘get some
text’););
addScript($sJS)
Execute the JavaScript code $sJS
$objResponse->addAlert(var txt = prompt(‘get some
text’););
 
一个独立的XML响应可能包含多个指令, 他们将按照加入响应的顺序执行.
让我们用一个用户在你的程序之中点击按钮为例来进行说明.
Onclick事件调用PHP函数对应的javascript封装.这个封装通过XMLHttpRequest发送异步请求到服务器给xajax调用PHP函数.
PHP函数做了一次数据库查询, 处理了一些数据, 或者序列化.
然后你使用xajaxResponse类生成包含多个指令的xajax的XML响应
,并回送给xajax的消息分析器执行:
A single XML response may contain multiple commands, which will
executed in the order they were added to the response. For example,
let’s say that a user clicks on a button in your application. The
onclick event calls the javascript wrapper for a PHP function. That
wrapper sends an asynchronous request to the server through
XMLHttpRequest where xajax calls the PHP function. The PHP function
does a database lookup, some data manipulation, or serialization.
You use the xajaxResponse class to generate an xajax XML response
containing multiple commands to send back to the xajax message pump
to be executed:
    $objResponse
= new xajaxResponse();
   
$objResponse.addAssign(myInput1,value,$DataFromDatabase);
   
$objResponse.addAssign(myInput1,style.color,red);
   
$objResponse.addAppend(myDiv1,innerHTML,$DataFromDatabase2);

   
$objResponse.addPrepend(myDiv2,innerHTML,$DataFromDatabase3);

   
$objResponse.addReplace(myDiv3,innerHTML,xajax,<strong>xajax</strong>);

   
$objResponse.addScript(var x = prompt(Enter Your Name););
           

    return
$objResponse->getXML();
 
$objResponse = new xajaxResponse();
   
$objResponse.addAssign(myInput1,value,$DataFromDatabase);
$objResponse.addAssign(myInput1,style.color,red);
$objResponse.addAppend(myDiv1,innerHTML,$DataFromDatabase2);

$objResponse.addPrepend(myDiv2,innerHTML,$DataFromDatabase3);

$objResponse.addReplace(myDiv3,innerHTML,xajax,<strong>xajax</strong>);

$objResponse.addScript(var x = prompt(Enter Your Name););
return $objResponse->getXML();
xajax消息分析器将会解析XML消息,并执行以下工作:
id为myInput1的元素的值将被赋值为 $DataFromDatabase的数据.
id为myInput1的元素的颜色将会变为red.
$DataFromDatabase2的数据会被追加到id为myDiv1的元素innerHTML之中.

$DataFromDatabase3的数据会被预先赋值给id为myDiv2的元素innerHTML之中.

id为myDiv3的元素的innerHTML
之中所有的xajax将被替换为<strong>xajax</strong>;
使得所有的单词 xajax 显示加粗.
一个提示框将会显示,用来询问用户姓名,从提示框返回的值会被命名为x的javascript变量接收.

The xajax message pump would parse the XML message and perform the
following:
The value of the element with id myInput1 would be assigned to the
data in $DataFromDatabase.
The color of the text in the element with id myInput1 would be
changed to red.
The data in $DataFromDatabase2 would be appended to the innerHTML
of the element with id myDiv1.
The data in $DataFromDatabase3 would be prepended to the innerHTML
of the element with id myDiv2.
All occurrences of xajax in the innerHTML of the element with id
myDiv3 would be replaced with <strong>xajax</strong>;
making all of the instances of the word xajax appear bold.
a prompt would be displayed asking for the user’s name and the
value returned from the prompt would be placed into a javascript
variable named x.
所有这些都由构成的PHP函数在服务器端执行并返回xajax的XML响应.
All of this is implemented on the server side in the PHP function
by forming and returning an xajax XML response.
如何异步处理表单数据?
Xajax使得异步处理表单数句非常非常的简单.
xajax.getFormValues()方法会自动的从表单提取数据,并作为一个参数提交给xajax注册的PHP函数.

xajax.getFormValues() 仅仅需要一个参数, 可以是你需要处理得表单的id,
或者是一个实际的表单对象.
你也可以使用xajax.getFormValues作为一个参数给xajax 函数,
例如:
xajax_processFormData(xajax.getFormValues(‘formId’));
xajax
会生成一个与表单数据对应的请求字符串给xajax服务器解析,然后以一个与表单数据对应的数组传递给PHP函数,就想你提交表单使用PHP的$_GET数组那么简单.

Xajax可以处理类似普通多维数组或者联合数组(哈希数组)等形式的复杂输入名字.
例如, 如果一个表单有三个多选框(checkboxes)并且都命名为
checkbox[], 但是值分别为 check1, check2, 和 check3,
然后使用 xajax.getFormValues 函数作为参数传递给xajax 函数, 则 PHP
函数会接受到一个如下的数组:
array (
  ‘checkbox’ =>
  array (
    0 =>
‘check1’,
    1 =>
‘check2’,
    2 =>
‘check3’,
  ),
)
作为函数参数的数组的结构与传统意义上提交表单之后的$_GET数组的结构相同.
你可以访问数组之中的checkbox 的数据:
$aFormData[‘checkbox’][0]
How do I process form data asynchronously?
xajax makes processing form data asynchronously extremely easy. The
xajax.getFormValues() method can be used to automatically extract
the data from a form and pass it as a parameter to a PHP function
you have registered with xajax.
xajax.getFormValues() takes one argument, which can be either the
id of the form you want to process, or the actual form object. You
use xajax.getFormValues as a parameter to your xajax function, like
this:
xajax_processFormData(xajax.getFormValues(‘formId’));
xajax generates a query string representing the form data which is
parsed by the xajax server and passed to your PHP function as an
array representing the form data, just as if you had submitted the
form and used the PHP $_GET array.
xajax will even handle complex input names to generate
multidimensional and associative arrays. For instance, if you have
a form with three checkboxes and you give them all the name
checkbox[], but different values like check1, check2, and
check3, and you use the xajax.getFormValues function as a
parameter to your xajax function, the PHP function will receive and
array that looks like this:
array (
  ‘checkbox’ =>
  array (
    0 =>
‘check1’,
    1 =>
‘check2’,
    2 =>
‘check3’,
  ),
)
The array argument to your function mirrors the structure that the
$_GET array would have if you were to submit the form
traditionally. You can then access the checkbox data in the array
like this:
$aFormData[‘checkbox’][0]
如何给xajax增加定制功能?
Xajax可以使用各种服加的用户定制功能进行扩展.
正因为xajax是完全面向对象的,并且可以使用xajaxResponse的addScript()方法,所以他具有无限扩展的可能.
你可以创建你自己的xajax响应类,来继承xajaxResponse
类以及它的方法,并加上你自己定制的响应.
让我们用一个定制的增加选择组合框(select combo
boxes)选项的响应指令的例子来说明. 你可以象下面这样扩展xajaxResponse
类:
class myXajaxResponse extends xajaxResponse

  function addAddOption($sSelectId, $sOptionText,
$sOptionValue) 
  { 
   
$sScript  = var objOption = new
Option(‘.$sOptionText.\’,’.$sOptionValue.\’);;
    $sScript .=
document.getElementById(‘.$sSelectId.\’).options.add(objOption);;

   
$this->addScript($sScript);
  }
}
现在, 取代xajaxResponse 对象的初始化, 把你自己的 myXajaxResponse
对象的初始化定义到你的 xajax PHP 函数之中:
$objResponse = new myXajaxResponse();
$objResponse->addAssign(div1, innerHTML, Some
Text); 
$objResponse->addAddOption(select1,New
Option,13); 
 
return $objResponse->getXML();
被调用时,这个方法将会发送需要的javascript到页面并执行.
当然你也有另外一种做法Alternatively,
你可以在你的程序之中创建一个如下的javascript函数:
<script type=text/javascript>
function addOption(selectId,txt,val)
{
       
var objOption = new Option(txt,val);
       
document.getElementById(selectId).options.add(objOption);
}
</script>
并且使用addScript() 调用这个方法:
$objResponse->addScript(addOption(‘select1′,’New
Option’,’13’););
How do I add custom functionality to xajax?
xajax can be extended with all kinds of additional custom
functionality. The extendability of xajax is made possible because
it is object oriented, and by the addScript() method of the
xajaxResponse class. You can create your own xajax response class
that extends the xajaxResponse class and has all of the normal
xajaxResponse methods, plus your own custom responses. For
instance, let’s say that you wanted to add a custom response
command to add options to select combo boxes. You could extend the
xajaxResponse class like this:
class myXajaxResponse extends xajaxResponse

  function addAddOption($sSelectId, $sOptionText,
$sOptionValue) 
  { 
   
$sScript  = var objOption = new
Option(‘.$sOptionText.\’,’.$sOptionValue.\’);;
    $sScript .=
document.getElementById(‘.$sSelectId.\’).options.add(objOption);;

   
$this->addScript($sScript);
  }
}
Now, instead of instantiating an xajaxResponse object, you
instantiate and use your myXajaxResponse object in your xajax PHP
functions:
$objResponse = new myXajaxResponse();
$objResponse->addAssign(div1, innerHTML, Some
Text); 
$objResponse->addAddOption(select1,New
Option,13); 
 
return $objResponse->getXML();
This method would send the necessary javascript to the page when it
was called and execute it. Alternatively, you could create a
javascript function in your application:
<script type=text/javascript>
function addOption(selectId,txt,val)
{
       
var objOption = new Option(txt,val);
       
document.getElementById(selectId).options.add(objOption);
}
</script>
and call it with the addScript() method:
$objResponse->addScript(addOption(‘select1′,’New
Option’,’13’););
我能在私有或者收费产品之中使用xajax吗?
简而言之: 能,只要你愿意.
xajax PHP 类库的发布遵循 GNU Lesser General Public License
(LGPL).
May I use xajax in a proprietary product and charge for it?
In short: Yes, you may.
The xajax PHP class library is released under the GNU Lesser
General Public License (LGPL).

历史上的今天

2017年:2017年的几个小目标(51条评论)

2014年:看电影021(44条评论)

2011年:快乐星期天136期:来来来,让我们一起打飞机(46条评论)

2009年:《第九突击队(9-ya rota)》(0条评论)

2009年:原来QQ邮箱有英文版啊(2条评论)

发表评论

您的昵称 *

您的邮箱 *

您的网站