欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Android平台上基于Rexsee实现的Ajax跨域访问,androidrexsee

来源: 开发者 投稿于  被查看 25884 次 评论:150

Android平台上基于Rexsee实现的Ajax跨域访问,androidrexsee


在移动平台的WebApp开发中,跨域问题一直是一个比较重要的环节。尽管Ajax的跨域在某些层面带来了不少安全隐患,但同时也彻底放开了传统Ajax的限制。。目前大量的移动Web开发框架都已从不同角度提出了自己的解决方法,效果不一。。
这里介绍Rexsee内置的Ajax对象,通过RexseeAjax对本地的页面进行动态注值。。
这就是我们使用Rexsee时可以使用的独特程序架构——B/C/S,即页面和资源文件本地化,通过ajax从服务器获取数据。 此种架构有3种好处:其一,页面读取和加载速度的优化。其二,流量的优化。其三,用户体验的优化。 先来了解一下rexseeajax对象。此对象包含3个方法和3个事件:前2个方法是异步取值,最后一个方法则是同步取值。事件的对应在手册中有相应的说明,这里就不再叙述了。 使用rexseeajax的时候需要注意: 在rexsee 提供的3个ajax对象函数中,submit和submitWithCallback函数在回调函数(事件)中返回的字串(response)是需要用unescape解码的,即直接alert(response)会看到乱码,需要alert(unescape(response))才可以看到正常的字串。但在syncSubmit函数中,返回字串则不需要unescape。 对于submit和syncSubmit,这两个函数是在读取数据的时候默认调用的旋转进度框,如果想在请求数据时不使用旋转进度框,那么我们需要使用submitWithCallback,当然我想使用其他进度框也可以在其的触发事件onAjaxProgressChanged中编写。 为什么要额外提到这里,因为在数据较多的情况下,使用带默认进度框的ajax方法会使得用户体验变得很不好,而使用没有进度框ajax方法,则可以自己定义用户等待的界面,比如一个GIF动画等等。同时,可以避免在页面切换时带来的延迟等待(因为我们一般都把页面本地化,页面的读取都是从本地读取,而数据获取则是从网络)。

附了个示例的JS代码,大家可以将数据页面的内容加大,看看在两种不同的请求形式下,等待程序的长短。那么以后自己的程序该如何去设计,都应该了然于胸了。 数据格式都是标准的json数据和数组,使用eval('('+json+')')方法转换为对象即可方便使用。

1.[图片] 截图示例

2.[图片] 截图示例

3.[图片] 截图示例

4.无进度框代码

function checkLogin(){
       var name=document.getElementById('username').value;
       var password=document.getElementById('password').value;
   rexseeAjax.submitWithCallback('http://www.fuwu800.com/yezhenqing/ajaxTest/check.php','name='+name+'&password='+password,'gb2312');
       }
           function onAjaxReturned(ajaxUrl,response)
   {
               var temp=eval("("+unescape(response)+")");
               temp=temp.result;
       if(temp==1){
       rexseeBrowser.go('test.html');
       }else if(temp==0){
       rexseeDialog.alert('消息框','登录失败!');
       }
   }

5.有进度框代码

function checkLogin(){
       var name=document.getElementById('username').value;
       var password=document.getElementById('password').value;
    var temp=eval("("+    rexseeAjax.syncSubmit('http://www.fuwu800.com/yezhenqing/ajaxTest/check.php','name='+name+'&password='+password,'gb2312')+")");
               temp=temp.result;
       if(temp==1){
       rexseeBrowser.go('test.html');
       }else if(temp==0){
       rexseeDialog.alert('消息框','登录失败!');
      }
      }

6.数据页面获取,无进度框代码

通过ajax来检查我们的用户名和密码是否合法,合法的话进入数据页面,否则提示失败。

	rexseeAjax.submitWithCallback('http://www.fuwu800.com/yezhenqing/ajaxTest/a.html','','gb2312');
   function onAjaxReturned(ajaxUrl,response)
   {
       document.getElementById("contents").innerHTML="";
       var temp=unescape(response);
       var test=eval("("+temp+")");
       for(var i=0;i<test.length;i++){
       document.getElementById("contents").innerHTML+="<li>"+test[i].firstName+"."+test[i].lastName+"</li>";
       }
   }

7.数据页面获取,有进度框代码

通过ajax来检查我们的用户名和密码是否合法,合法的话进入数据页面,否则提示失败。

window.onRexseeReady=function(){

       document.getElementById("contents").innerHTML="";
       var test=eval("("+rexseeAjax.syncSubmit('http://www.fuwu800.com/yezhenqing/ajaxTest/a.html','','gb2312')+")");
       for(var i=0;i<test.length;i++){
       document.getElementById("contents").innerHTML+="<li>"+test[i].firstName+"."+test[i].lastName+"</li>";
       }
   
}

8.[文件] RexseeAjax函数的java原生源码~17KB 下载(80)

用户评论