app_can 的AJax异步,两个解决方案

在返回头的content-type中设置为application/json
利用Appcan的Native模式开发的widget,也是属于跨域访问的范畴,因此,也会碰到上述情况,这里介绍两种Appcan中的解决方案:
一、Jquery的$.getJSON(url,function(data){});

第一个参数是url获取数据地址,第二个参数成功取得数据时调用;
其中,url中必须带有jsoncallback参数,参数值为"?",Jquery会在请求时替换为一个随机的唯一数:

http://xxxx.php?jsoncallback=?&name1=value1&name2=value2

用$.getJSON时,数据的返回格式要是xxx({"a":"1","b":"2"})
例如:
xxx({"status":"true","listData":[{"id":"261803","title":"虚拟投影键盘","name":"前沿科技","summary":"这款虚拟投影键盘设计独特,每一个敲击都不会相互干扰,可以同时接受。"},{"id":"261994","title":"科学家发现"最大黑洞"","name":"环球快递","summary":"美国加州大学伯克利分校的天文学家尼古拉斯•麦克康纳尔和他的同事发现了两个目前已知最大的黑洞。"}}]})
注意:需验证{"a":"1","b":"2"}json格式的正确性,可在jsonlint.com网站上验证,如果格式不合法将获取不到数据

二、Appcan封装的uexXmlHttpMgr对象

方法如下:
uexXmlHttpMgr.open(String inXmlHttpID, String inMethods, String inUrl);

第一个参数:

inXmlHttpID:异步请求操作ID;必须值。(随机不重复)

第二个参数:

inMethods:异步请求类型;(get,post)

第三个参数:

inUrl:异步请求地址;
通过uexXmlHttpMgr.onData函数获取值。
uexXmlHttpMgr.onData(inOpCode,inResult)
inOpCode:操作ID,由发起请求时传入的值,随机不重复;
inResult:服务器返回的任意数据;String类型。
使用方式:

<!DOCTYPE HTML>
<html>
  <head>
    <title>跨域异步请求接口</title>
   </head>
  <body>
    <div class="tit">跨域异步请求接口</div>
    <div class="conbor" id="my_result"></div>
    <script type="text/javascript">
      var url="http://192.168.1.5/musicmodel/api/user.api.php?m=param&appid=1000";
      function xmlHttp(){
        uexXmlHttpMgr.open("1", "GET",url,"");
        uexXmlHttpMgr.send("1");
      }
      function httpSuccess(opid,stauts,result){
        document.getElementById("my_result").innerHTML =result;
        uexXmlHttpMgr.close("1");
      }
      window.uexOnload = function(){
        uexXmlHttpMgr.onData = httpSuccess;
        uexWidgetOne.cbError = function(opCode, errorCode, errorInfo){
          alert(errorInfo);
        }
      }
     </script>
   </body>
</html>

该方法返回数据只要是正确的json格式就可以;






posted @ 2013-09-30 11:51  小小戒  阅读(580)  评论(0编辑  收藏  举报