XCO请求

2018-08-06 11:32 更新

XCO请求是基于AJAX的异步请求,和普通的AJAX请求区别在于:

  1. contentType为application/xco;charset=utf-8
  2. 请求方式为POST
  3. 请求参数位于BODY体内,数据格式为XCO对象序列化后的XML字符串;

xco.jquery-{version}.js提供了XCO请求的具体实现,从名字上我们大致可以看出,XCO请求从实现角度,是基于jquery的,因此在使用XCO请求的时候,我们也需要引入jquery类库。

1. 使用示例

<button type="button" name="t1" onclick="doSubmit()">XCO请求</button>


<script type="text/javascript" src="/js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="/js/xco-1.0.1.js"></script>
<script type="text/javascript" src="/js/xco.jquery-1.0.1.js"></script>
<script type="text/javascript">
    function doSubmit() {
        var xco = new XCO();
        xco.setIntegerValue("id", 1);
        xco.setStringValue("name", "张三");
        var options = {
            url : "/m1.xco",        //请求的URL地址
            data : xco,             //请求的参数,必须为XCO对象
            success : doCallBack    //成功后的回调函数
        };
        $.doXcoRequest(options);
    }
    function doCallBack(data) {
        // 这里的data是一个XCO对象
        alert('doCallBack:\n' + data);
    }
</script>

说明:关于服务端的接收和处理,可参考<http://www.xson.org/project/web/1.2.0/>;

2. 成功处理

对于请求成功后的处理,XCO请求还提供多回调函数的支持。

function doSubmit() { var xco = new XCO(); xco.setIntegerValue("id", 1); xco.setStringValue("name", "张三"); var options = { url : "/m1.xco", //请求的URL地址 data : xco, //请求的参数,必须为XCO对象 success : [ doCallBack1, doCallBack2, doCallBack3 ] }; $.doXcoRequest(options); }


function doCallBack1(data) {
    // TODO
}
function doCallBack2(data) {
    // TODO
}
function doCallBack3(data) {
    // TODO
}

3. 结果检测

XCO请求返回的结果是一个XCO对象,我们可以通过XCO对象的getCode方法拿到请求的状态代码(一般情况下,0代表处理成功,非0代表处理失败),通过getMessage方法拿到错误信息。对于返回结果,我们往往会先检测其状态代码,然后再做业务处理;我们先看一个示例:

示例1

function doCallBack(data) { if(1 == data.getCode()){ alert(data.getMessage()); // 处理错误码1 return; } if(2 == data.getCode()){ alert(data.getMessage()); // 处理错误码2 return; } ... if(0 == data.getCode()){ // 处理正常业务 } }

现在,我们可以使用另一种方式来实现上面的功能:

示例2

function doSubmit() { var xco = new XCO(); xco.setIntegerValue("id", 1); xco.setStringValue("name", "张三"); var options = { url : "/m1.xco", //请求的URL地址 data : xco, //请求的参数,必须为XCO对象 success : doCallBack, //成功后的回调函数 detector : doDetector //结果检测:该函数只有返回true,success回调才会执行 }; $.doXcoRequest(options); }

function doDetector(data) { if(0 == data.getCode()){ return true; } if(1 == data.getCode()){ alert(data.getMessage()); // 处理错误码1 } else if(2 == data.getCode()){ alert(data.getMessage()); // 处理错误码2 } return false; }

function doCallBack(data) { // 处理正常业务 }

    

示例3

function doSubmit() { var xco = new XCO(); xco.setIntegerValue("id", 1); xco.setStringValue("name", "张三"); var options = { url : "/m1.xco", //请求的URL地址 data : xco, //请求的参数,必须为XCO对象 success : doCallBack, //成功后的回调函数 detector : [doDetector1, doDetector2] }; $.doXcoRequest(options); } function doDetector1(data) { if(1 == data.getCode()){ alert(data.getMessage()); // 处理错误码1 return false; } return true; } function doDetector2(data) { if(2 == data.getCode()){ alert(data.getMessage()); // 处理错误码2 return false; } return true; }

示例3中,我们使用了两个结果检测函数,只有这两个检测函数都返回true,success回调才会执行,任何一个检测函数返回false,都将结束回调流程。

如果我们希望先检测code是否为0,如果为0后续则无需再做检测,该如何做呢?我们可以将示例3中的代码做如下改动:

function doDetector1(data) { if(0 == data.getCode()){ return IGNORE_FOLLOW_UP; //返回特殊标记,忽略后续结果检测 } // 其他结果检测 }

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号