ajax代替form,3.3. 用AJAX取代传统的form提交

3.3.5. 改造示例二:用Ajax.Request获取并处理数据

当从版本库下拉框(②)选择时,将触发更新授权路径的列表(③)。

原来的实现是提交整个表单并刷新整个页面,用AJAX改造后,

只更新授权路径的列表(③)部分。

虽然也可以用Ajax.Updater来更新整个授权路径列表,但为了演示另外一种Ajax处理方式,

以及获得更少的带宽占用和更快的响应,使用Ajax.Request来实现。

版本库下拉框(②)更新时,执行JavaScript函数:update_path(),而非提交表单:

函数update_path(),执行Ajax.Request,从"get_auth_path"这个action获取信息,

并用返回值(request.reponseText)为参数调用JavaScript函数ajax_update_path。

function update_path(form)

{

var repos = "";

if (form.reposinput[0].checked) {

repos = form.reposselector.options[form.reposselector.selectedIndex].value;

} else {

repos = form.reposname.value;

}

var params = {repos:repos};

showNoticesPopup();

new Ajax.Request(

'${h.url_for(controller="check", action="get_auth_path")}',

{asynchronous:true, evalScripts:true, method:'post',

onComplete:

function(request)

{ hideNoticesPopup();

ajax_update_path(request.responseText);},

parameters:params

});

}

函数ajax_update_path(),解析参数code,更新授权路径的下拉列表框。

本例非常简单,直接将参数(code)当作JavaScript代码并执行(eval函数),

这是因为Ajax.Request获取到的内容是字符串格式的JavaScript代码。

最终这些JavaScript代码在函数ajax_update_path中被执行,

并用相应的数据更新了授权路径的列表(③)。

function ajax_update_path(code)

{

var id = new Array();

var name = new Array();

var total = 0;

pathselector = document.forms[0].pathselector;

lastselect = pathselector.value;

pathselector.options.length = 0;

try {

eval(code);

for (var i=0; i < total; i++)

{

pathselector.options[i] = new Option(name[i], id[i]);

if (id[i]==lastselect)

pathselector.options[i].selected = true;

}

}

catch(exception) {

alert(exception);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值