Zh:Tutorilas:Processing Forms with xajax






Zh:Tutorilas:Processing Forms with xajax

[edit] xajax.getFormValues()

xajax用来处理异步表单数据也相当简单。xajax.getFormValues()方法用来将表单数据自动提取出来,并将其作为参数传递给你已经用xajax注册过的PHP函数。

xajax.getFormValues()带有一个强制参数,它可以是你想处理的表单元素id,或者是实际的表单对象(参见后面的注意)。你可以使用xajax.getFormValues作为xajax函数的参数,像这样:

xajax_processFormData(xajax.getFormValues('formId'));

代码中xajax_processFormData()是你的函数,它使用表单数据作为参数。

xajax将生成一个代表表单数据的查询字符串,由xajax服务器解析并负责将表单数据封装为一个数据传递给你的PHP函数,就好象你提交表单后使用PHP的$_GET数组一样。

注意:你的PHP函数定义里面必须含有一个获得数组值的形式参数,否则表单变量不会传递给PHP函数。

注意:不要试图访问$_GET变量...你处理PHP函数应该象MyFunc($dta)。 当函数被调用时,表单变量数组会被传递到$dta变量中,然后你可以象处理其它联合数组一样处理它。我试过$_GET,呵呵,没用。(针对注意的注意:你可以通过$_POST['xajaxargs'][0]得到数据,它是一组编码过的XML ajxquery标签--但为什么不让xajax使你的工作变得更轻松呢?何况,在未来的版本中它将被改掉。)

xajax甚至能够处理复杂的input元素名称,产生出多维的联合数组。例如,你的表单有三个checkbox,你给他们的名称统一为"checkbox[]",但拥有不同的值如"check1","check2",和"check3",你使用xajax.getFormValues函数作为参数传递给你的xajax函数,PHP函数将会接收到一个数组如下:

array (
  'checkbox' => 
  array (
    => 'check1',
    => 'check2',
    => 'check3',
  ),
)

传递给你函数的数据参数镜像了你使用传统方式提交表单后产生的$_GET数组的结构。然后你就可以访问数组里面的checkbox数据象这样: $aFormData['checkbox'][0]


注意:确信你赋予表单name属性的同时也赋予了id标签值。如果你在表单中没有赋给其id,IE使用name属性作为其id值,getFormValues函数会生效。而Firefox,刚好相反,它则不能找到表单,除非你显示的指定了表单的id值。

注意:当使用Firefox时,确信赋予所有input类型一个name属性,这样getFormValues函数才会得到所需要的值。仅一个id属性是不会有效的。

[edit] 提交部分表单数据

如果你只想提交部分表单元素(表单子集),从0.2.1开始有一个新的选项。xajax.getFormValues有一个可选参数,指定一个前缀--如果设置的话,则仅以指定前缀起头的表单元素才会被提交给PHP函数。这对于拥有一个大表单但却只想更新其部分数据时是非常方便的。前缀参数是该函数的第三个参数,第一个是表单的id,第二个是一个布尔值表示是否提交禁止(disabled)域。

所以该函数的完全语法结构应该是:

xajax_processFormData(xajax.getFormValues(formID[,bSubmitDisabled[, prefix]]));