XCO請求

2018-08-06 11:32 更新

XCO請求是基于AJAX的異步請求,和普通的AJAX請求區(qū)別在于:

  1. contentType為application/xco;charset=utf-8;
  2. 請求方式為POST
  3. 請求參數(shù)位于BODY體內(nèi),數(shù)據(jù)格式為XCO對象序列化后的XML字符串;

xco.jquery-{version}.js提供了XCO請求的具體實現(xiàn),從名字上我們大致可以看出,XCO請求從實現(xiàn)角度,是基于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,             //請求的參數(shù),必須為XCO對象
            success : doCallBack    //成功后的回調(diào)函數(shù)
        };
        $.doXcoRequest(options);
    }
    function doCallBack(data) {
        // 這里的data是一個XCO對象
        alert('doCallBack:\n' + data);
    }
</script>

說明:關于服務端的接收和處理,可參考<http://www.xson.org/project/web/1.2.0/>;

2. 成功處理

對于請求成功后的處理,XCO請求還提供多回調(diào)函數(shù)的支持。

function doSubmit() { var xco = new XCO(); xco.setIntegerValue("id", 1); xco.setStringValue("name", "張三"); var options = { url : "/m1.xco", //請求的URL地址 data : xco, //請求的參數(shù),必須為XCO對象 success : [ doCallBack1, doCallBack2, doCallBack3 ] }; $.doXcoRequest(options); }


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

3. 結(jié)果檢測

XCO請求返回的結(jié)果是一個XCO對象,我們可以通過XCO對象的getCode方法拿到請求的狀態(tài)代碼(一般情況下,0代表處理成功,非0代表處理失敗),通過getMessage方法拿到錯誤信息。對于返回結(jié)果,我們往往會先檢測其狀態(tài)代碼,然后再做業(yè)務處理;我們先看一個示例:

示例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()){ // 處理正常業(yè)務 } }

現(xiàn)在,我們可以使用另一種方式來實現(xiàn)上面的功能:

示例2

function doSubmit() { var xco = new XCO(); xco.setIntegerValue("id", 1); xco.setStringValue("name", "張三"); var options = { url : "/m1.xco", //請求的URL地址 data : xco, //請求的參數(shù),必須為XCO對象 success : doCallBack, //成功后的回調(diào)函數(shù) detector : doDetector //結(jié)果檢測:該函數(shù)只有返回true,success回調(diào)才會執(zhí)行 }; $.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) { // 處理正常業(yè)務 }

    

示例3

function doSubmit() { var xco = new XCO(); xco.setIntegerValue("id", 1); xco.setStringValue("name", "張三"); var options = { url : "/m1.xco", //請求的URL地址 data : xco, //請求的參數(shù),必須為XCO對象 success : doCallBack, //成功后的回調(diào)函數(shù) 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中,我們使用了兩個結(jié)果檢測函數(shù),只有這兩個檢測函數(shù)都返回true,success回調(diào)才會執(zhí)行,任何一個檢測函數(shù)返回false,都將結(jié)束回調(diào)流程。

如果我們希望先檢測code是否為0,如果為0后續(xù)則無需再做檢測,該如何做呢?我們可以將示例3中的代碼做如下改動:

function doDetector1(data) { if(0 == data.getCode()){ return IGNORE_FOLLOW_UP; //返回特殊標記,忽略后續(xù)結(jié)果檢測 } // 其他結(jié)果檢測 }

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號