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));
jsonp把一个数组中的数组,根据实际情况分批发到服务器,结合jsonrpc使用。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。