jsonrpc+jsonp请求+把数组中的数据分批jsonp到服务器

/*
*主页面热贴和统计数脚本
*/
var UnitNew_Setting = {
    requestUrl: "http://eipsps.scmcc.com.cn/EipUniStatistics",     //跨域的地址http://localhost:16968 我们自己的地址http://eipsps.scmcc.com.cn/EipUniStatistics
    filterParams: ["InfomationID","infomationid"],                                 //参数设置
    countFlag:0
};
(function (win) {
    win.EIPUnitVisitNewGetCount = {
        pageReady: function (fun) {
            var getElement = win.onload;
            if (typeof getElement !== ‘function‘) {
                win.onload = fun;
            } else {
                getElement();
                fun();
            }
        },
        init: function (obj) {
            win.EIPUnitVisitNewGetCount.requestUrl = obj.requestUrl;
            win.EIPUnitVisitNewGetCount.filterParams = obj.filterParams;
            win.EIPUnitVisitNewGetCount.countFlag = obj.countFlag;
        },
        getVisitCount: function (url,title,fun) {                                       //此方法由主页调用    
            //把传过来的参数,依数返回
            var resultUrl=url;
            var resultTitle=title;
             
            var jsonrpc = {
                method: "getUrlCount",
                params: [url, window.EIPUnitVisitNewGetCount.filterParams],//必须要先初使化
                id: "getNewsCount"
            }
            var jsonrpcString = JSON.stringify(jsonrpc);
            var requestUrl = window.EIPUnitVisitNewGetCount.requestUrl + "/jsonrpc.ashx?jsonrpc=" + encodeURIComponent(jsonrpcString) + "&o=" + new Date().getTime();
            $.ajax({
                type: "get",
                url: requestUrl,
                dataType: "jsonp",
                jsonp: "callback",
                success: function (data) {
                    var result = data.result;
                    if(fun){
                    fun(result,resultUrl,resultTitle);
                    }
                },
                error:function(data){
                    //请求失败时执行
                    if(fun){
                     fun(0,resultUrl,resultTitle);
                    }
                },
                beforeSend: function (xmlHttp) {
                    xmlHttp.setRequestHeader("If-Modified-Since", "0");
                    xmlHttp.setRequestHeader("Cache-Control", "no-cache");
                }
            });
        },
        getVisitCountForNew:function(documentId){                                                      //此方法作用于二级页面的信息页面
            
            var tbodyForInformation = document.getElementById(documentId);
            var trs = tbodyForInformation.getElementsByTagName("tr");
            if(trs==null||trs.length==0)return;

            var trsLen = trs.length;

            //取出所有的url
            var urlsparams=[];
            for(var trs_i=0;trs_i<trsLen;trs_i++){
                urlsparams.push(trs[trs_i].value);//实际弹出时多了两个参数
            };

            var jsonrpc = {
                method: "GetUrlStatisicMulti",
                params: [urlsparams,window.EIPUnitVisitNewGetCount.filterParams],//必须要先初使化
                id: "1"
            }
            var jsonrpcString = JSON.stringify(jsonrpc);
            var requestUrl = window.EIPUnitVisitNewGetCount.requestUrl + "/jsonrpc.ashx?jsonrpc=" + encodeURIComponent(jsonrpcString) + "&o=" + new Date().getTime();
            
            if(requestUrl.length>2000){
                var num = parseInt(requestUrl.length/2000)+1; //2至n+1次请求
                //确认每次请求最多可以发送多少条数据 ,因为requestUrl的长度是同数组生成的,所有数组的1/3也就是长度的1/3,可满足需求
                var processCount =parseInt(urlsparams.length/num);//只是确认最多发送的条数:10/2=5 可发完,10/3=3 最后一条数据没有发完,最后做健壮性的判断
                //因为余数不可能大于等数,所以,在没有发完的情况,把最后的等数条数再发一次,即可确保全部发送完毕。

                var urlsparams_index=0;
                //计划内的请求
                for(var num_i=0;num_i<num;num_i++){
                    var tempUrlArr = new Array();
                    //每次从数组中取出processCount条数据 7条每次取3条:0-3 3-6 最后一条交给健壮性请求来发送
                    for(var fromArr_i=urlsparams_index;fromArr_i<processCount+urlsparams_index;fromArr_i++){
                        tempUrlArr.push(urlsparams[fromArr_i]);
                    }
                    urlsparams_index=fromArr_i;//从开始部份再一次开始 即0-3 确定开始为3
                    dealProcessArr(tempUrlArr);
                };
                //健壮性的请求再发送一次 取出数组的 后processCount余下的条数
                var strongArr = new Array();
                var start=urlsparams.length-urlsparams.length%num;
                for(var strong_i=start;strong_i<urlsparams.length;strong_i++){
                    strongArr.push(urlsparams[strong_i]);
                }
                dealProcessArr(strongArr);
            }else{
                dealProcess(requestUrl);
            };//一次请求发送完毕。

            function dealProcessArr(urlsparams_deal){
              var jsonrpc_Arr = {
                method: "GetUrlStatisicMulti",
                params: [urlsparams_deal,window.EIPUnitVisitNewGetCount.filterParams],//必须要先初使化
                id: "1"
              }
             var jsonrpcString_Arr = JSON.stringify(jsonrpc_Arr);
             var requestUrl_Arr = window.EIPUnitVisitNewGetCount.requestUrl + "/jsonrpc.ashx?jsonrpc=" + encodeURIComponent(jsonrpcString_Arr) + "&o=" + new Date().getTime();
             dealProcess(requestUrl_Arr);
            };

            function dealProcess(requestUrl){
                $.ajax({
                type: "get",
                url: requestUrl,
                dataType: "jsonp",
                jsonp: "callback",
                success: function (data) {
                    var result = data.result;
                    if(result==null)return;
                    dealCallBack(result.Items);
                },
                error:function(data){
                   alert("请求发生了错误:setHotAndNum.js 94行!");
                },
                beforeSend: function (xmlHttp) {
                    xmlHttp.setRequestHeader("If-Modified-Since", "0");
                    xmlHttp.setRequestHeader("Cache-Control", "no-cache");
                }
             });
            };
            function dealCallBack(resultArr){
                var len = resultArr.length;                                 //Items = []
                for(var i=0;i<len;i++){
                    var url = resultArr[i].Key;                             //---------------------------url
                    var count = resultArr[i].Value;                         //---------------------------count
                    var flag=true;
                    for(var j=0;j<trsLen&&flag;j++){                        //与所有的tr进行匹配 
                        if(url==trs.item(j).value){
                            setImgAndNumToTr(trs.item(j),count);
                            flag=false;
                        }
                    };

                };
            };
            function setImgAndNumToTr(tr,count){
               var img=‘<img style="margin-left:15px;margin-right:-15px;" src="‘+ window.EIPUnitVisitNewGetCount.requestUrl + ‘/images/hot.jpg‘+‘"/>‘;
               if (count<EIPUnitVisitNewGetCount.countFlag)img="";

               var tds = tr.getElementsByTagName("td");
               if(tds==null||tds.length==0)return;
               var textDiv=tds[0].getElementsByTagName("div")[0];
               textDiv.innerHTML=img+textDiv.innerHTML;                                   //设置图片

               var td= document.createElement("td");
               td.width="100";
               td.align="center";
               td.className="Cell";
               td.innerHTML=count;                                                      //设置数字
              //table,thead,tfoot,tbody,tr,col,colgroup,html,title,style,frameset这些元素的innerhtml属性都是只读的,不能直接赋值.table没有appenChild
               tr.appendChild(td);//加入到tr中
            };

        },
        getVisitCountForInformation:function(documentId){                                                              //此方法作用于二级页面的新闻页面
            
            var trs = document.getElementById("dgList").getElementsByTagName("tr");
            var urlsparams = [];                                                    //取出所有tr上的url地址。
            for (var trs_i = 1; trs_i < trs.length; trs_i++) {
                urlsparams.push(gettrUrl(trs[trs_i]));
            };


           var jsonrpc = {
                method: "GetUrlStatisicMulti",
                params: [urlsparams,window.EIPUnitVisitNewGetCount.filterParams],//必须要先初使化
                id: "1"
            }
            var jsonrpcString = JSON.stringify(jsonrpc);
            var requestUrl = window.EIPUnitVisitNewGetCount.requestUrl + "/jsonrpc.ashx?jsonrpc=" + encodeURIComponent(jsonrpcString) + "&o=" + new Date().getTime();
            
            if(requestUrl.length>2000){

                var num = parseInt(requestUrl.length/2000)+1; //2至n+1次请求
                //确认每次请求最多可以发送多少条数据 ,因为requestUrl的长度是同数组生成的,所有数组的1/3也就是长度的1/3,可满足需求
                var processCount =parseInt(urlsparams.length/num);//只是确认最多发送的条数:10/2=5 可发完,10/3=3 最后一条数据没有发完,最后做健壮性的判断
                //因为余数不可能大于等数,所以,在没有发完的情况,把最后的等数条数再发一次,即可确保全部发送完毕。

                var urlsparams_index=0;
                //计划内的请求
                for(var num_i=0;num_i<num;num_i++){
                    var tempUrlArr = new Array();
                    //每次从数组中取出processCount条数据 7条每次取3条:0-3 3-6 最后一条交给健壮性请求来发送
                    for(var fromArr_i=urlsparams_index;fromArr_i<processCount+urlsparams_index;fromArr_i++){
                        tempUrlArr.push(urlsparams[fromArr_i]);
                    }
                    urlsparams_index=fromArr_i;//从开始部份再一次开始 即0-3 确定开始为3
                    dealProcess(tempUrlArr);
                };
                //健壮性的请求再发送一次 取出数组的 后processCount余下的条数
                var strongArr = new Array();
                var start=urlsparams.length-urlsparams.length%num;
                for(var strong_i=start;strong_i<urlsparams.length;strong_i++){
                    strongArr.push(urlsparams[strong_i]);
                }
                dealProcessArr(strongArr);
            }else{
                dealProcess(requestUrl);
            }

           function dealProcess(requestUrl){
                $.ajax({
                type: "get",
                url: requestUrl,
                dataType: "jsonp",
                jsonp: "callback",
                success: function (data) {
                    var result = data.result;
                    if(result==null)return;
                    dealCallBack(result.Items);
                },
                error:function(data){
                   alert("请求发生了错误:setHotAndNum.js 94行!");
                },
                beforeSend: function (xmlHttp) {
                    xmlHttp.setRequestHeader("If-Modified-Since", "0");
                    xmlHttp.setRequestHeader("Cache-Control", "no-cache");
                }
             });
            };

           function dealCallBack(resultArr){

                var td = document.createElement("td");
                td.innerText = "总浏览量";
                td.align = "center";
                td.width = "100";
                trs[0].appendChild(td);

                var len = resultArr.length;                                 //Items = []
                for(var i=0;i<len;i++){
                    var url = resultArr[i].Key;                             //---------------------------url
                    var count = resultArr[i].Value;                         //---------------------------count
                    var muchTag=true;
                    for(var much_i=1;much_i<trs.length&&muchTag;much_i++){
                        if(url==gettrUrl(trs[much_i])){
                            setHotAndNum(trs[much_i],count);
                            //设置图片和数量
                            muchTag=false;          //一旦匹配到,就进行下一轮的匹配
                        }
                    }
                };
            };
            
            function setHotAndNum(tr,count) {
                var img=‘<img src="‘+ window.EIPUnitVisitNewGetCount.requestUrl + ‘/images/hot.jpg‘+‘"/>‘;
                if (count<window.EIPUnitVisitNewGetCount.countFlag)img="";
                var inserTd = tr.getElementsByTagName("td")[1];
                inserTd.innerHTML = img + inserTd.innerHTML; //图片
                var newTd = document.createElement("td");
                newTd.align="center";
                newTd.onclick = function(){
                   return ReadInfo(gettrUrl(tr));
                }
                newTd.innerText = count;//数字
                newTd.className="Cell";
                tr.appendChild(newTd);
            };
             //得到tr绑定的连接地址
            function gettrUrl(elementTr) {
                var sonTd = elementTr.getElementsByTagName("td")[0].getElementsByTagName("input")[0];
                var tr_url ="http://eipbiz.scmcc.com.cn/wfInfoPub/"+"ShowInfo.aspx?InfomationID=" + sonTd.id.toString().split("_")[1] + "&&Operation=Read";
                return tr_url;
            }
        }
    };
} (window));
View Code

jsonp把一个数组中的数组,根据实际情况分批发到服务器,结合jsonrpc使用。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。