zoukankan      html  css  js  c++  java
  • js 模拟报文发送requst请求(模拟点击按钮等操作)。

    1.问题描述:

              在实际开发过程中,会因为各种各样的问题, 导致一批数据,统一执行一个操作或者一样的请求。

    2.实现基础知识必备:

        2.1Chrome中关于Console的输出(js调试):

          console.log 用于输出普通信息 

          console.info 用于输出提示性信息

          console.error用于输出错误信息

          console.warn用于输出警示信息

          console.dir(console)  可以查看console 下的所有方法

    其他console控制台中的内部方法可以参考:

    参考优秀博客:https://www.cnblogs.com/Renyi-Fan/p/9687315.html#_label0_2   ; https://www.cnblogs.com/Renyi-Fan/p/9687315.html

    参考googleApi原版文档:  https://developers.google.com/web/tools/chrome-devtools/console/api

    2.2  JS  中常用的方法函数的使用

     JavaScript 中的常用对象,经常忘记方法名称 : https://www.w3school.com.cn/jsref/jsref_obj_string.asp

     

    a. sql查询出来数据,Execl导出,之后转换超过需要个格式装换成object对象

      Execl中的数据选择需要的行,直接复制到 Notepad2(系统自带) 中,利用他里面的正则表达式的替换规则做替换。(Ctrl+H)调出替换窗口

     1.经常使用的正则表达式 :Regular expression search  s+  1个或者多个空白符
     2. 换行做替换用: 格式转换成 Transform backslashes  ,search String 中用 做转换 
     3. 用在线工具 : http://www.ecjson.com/exceltojson/  EXCEL ,CSV 转JSon

         把execl 中自己选择的行列直接复制过去,点击装换就 

    [

    {"CreateTime":"2019/07/03 04:44:15","LastUpdateTime":"2019/07/03 04:44:34"},
    {"CreateTime":"2019/07/03 06:10:16","LastUpdateTime":"2019/07/03 06:10:35"}]

    b. object 对象集合foreach 访问object中的每个对象 

    b1.对于逗号分隔的多个对象的访问 

             var   obstr="1050516,64244187";

               function  testTestIdStr(textStr)

    {

        //组装成自己想要的的数据(用逗号分隔成元素)

         var Ids=textStr.split(',');

         ids.forEach(o=>{

          console.info(o);

     });

    }

     

       b2. 对于多行的数据的(notePad2 中替换 execl 中的数据替换成一个字符串)

                   var   obstr="1050516,64244187##1050538,64271921##1050554,64287642##1050593,64166857##1050669,63310506##1050870,64226341";

                       function textStr2(textOrderIdStrs)

    {
    var obs=textOrderIdStrs.split('##');
    obs.forEach(o=>{
    var obAttrs=o.split(',');
    console.info(obAttrs[0]);
    });
    }

         b3.对于装换成的JSon格式的访问

    var b=[
    {"PKID":"958624","OrderId":"47763169","CreatedBy":"AUTOCommon","CreateTime":"2019/2/3 3:33"},
    {"PKID":"958636","OrderId":"47514656","CreatedBy":"AUTOCommon","CreateTime":"2019/2/4 19:48"}
    ];

    function textJson(testStr)
    {
    if(testStr.length==0)
    {
    return;
    }
    //下标访问方式
    testStr[0];
    testStr.forEach(o=>{
    console.info(o);
    //直接访问对象中成员
    console.info(o.PKID);
    })
    }

     

    c.js 中的定时服务的使用

    • setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。
    • setTimeout() :在指定的毫秒数后调用函数或计算表达式。

                                                                                            setInterval(code,millisec,lang)(可以执行多次)

    参数描述
    code 必需。要调用的函数或要执行的代码串。
    millisec 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。
    lang 可选。 JScript | VBScript | JavaScript

     

                                                     setTimeout(code,millisec,lang)(只执行一次)
    参数描述
    code 必需。要调用的函数后要执行的 JavaScript 代码串。
    millisec 必需。在执行代码前需等待的毫秒数。
    lang 可选。脚本语言可以是:JScript | VBScript | JavaScript
    function  setIntervalStr()
    {
      var count=0; var lencount=3;
      
    //循环调用 console.time("setInterval"); var flag=setInterval( function(){ if(count>=lencount) { clearInterval(flag); } console.info(count); count++; },1000) console.timeEnd("setInterval");
    //单次调用 console.time("setTimeout"); var flag2=setTimeout(function(){ console.info("aaaaa"); },2000); console.timeEnd("setTimeout"); }
    
    

    执行结果: 从输出结果来看 两个定时期中的待执行的方法是异步的,不影响主线程的正常执行。

    3.实现方法:(F12,查询本次调用回来的报文)

           循环调用同一个方法,数量多时,防止接口被打死,用了setInterval 的定时循环;限制执行过程中防止同一个单子重复调用,需要加把下标致前。

    调用方法职中得request参数

    request  headers参数

    1.模拟一次报文请求中  Form Data 数据  请求

    /// 定时循环调用执行方法
    function textCallsetInterval(textOrderIds)
    {
    var oBaosuns=textOrderIds.split(','); var index=0; var count=oBaosuns.length;
    // 定时服务开始
    var flag=setInterval (function(){ if(index>=count) {
    //定时服务终止 clearInterval(flag); }
    //要执行请求的对象
    var o1=oBaosuns[index];
    //先放在这里,防止重复操作 index
    ++;
    //调用方法与 NetWork中单次调用中 RequestHeaders 中的path, obj需要传递额参数为 NetWork中的 全量Form Data 数据的组装 $.post(
    '/XX/XXX',{ guid: 'b682d392-6196-4294-b9e6-58f869a52f37', servicePath: 'XXXXXX', serviceName: 'IXXXXXXX', operationName: 'XXXXXXXXX', extendHistories:[{Index:1}], parameterValues:[{Index:1 },{Index:2,Value:o1 },{Index:3,Value:2 },{Index:4},{Index:5},{Index:6 },{Index:7},{Index:8,Value:0}], },function(result){ if(!result.IsSuccess) { console.error(o1); } else { console.log (o1); } }); } ,2000) }

    2.如果有按钮,则模拟点击按钮事件

    var a='64131995,64136656'
    var datas=a.split(',');
    var i=0;
    function auto() {
        if (i <datas.length) {
              setTimeout(() => {
                //对发送请求中的参数重新进行赋值
                  var request = $("#requestcontainer ul li");
                  request.eq(2).find('input').val(datas[i]);
                  console.info(datas[i]);
                  i++;
                 //找到需要操作的按钮的模拟点击操作
                $('#callWcfServiceBtn').click();
                auto();
         }, 2000);
       }
    }

    4.总结: 

            JS脚本编程,能辅助我们处理一些重复的工作,而不用动后台代码。

  • 相关阅读:
    并发编程与高并发学习笔记六
    并发编程与高并发学习笔记五
    并发编程与高并发学习笔记四
    浅谈数据挖掘与机器学习
    IntelliJ Idea常用的快捷键
    单链表的插入,查找,删除
    二叉树的序列化和反序列化及完全二叉树和满二叉树的区别
    二叉树的按层遍历并实现换行
    冒泡排序,选择排序,插入排序,快速排序的比较及优化
    axSpA患者新发炎症更容易发生在既往发生过炎症的区域
  • 原文地址:https://www.cnblogs.com/q994321263/p/11272377.html
Copyright © 2011-2022 走看看