js中一个变量怎么每隔一段时间获取weiapi的json数据

2021-04-28 10:08发布

有时候连接时间过长就会导致有一段较长时间空白,现在我想利用js中的一个变量每隔一段时间去获取json,如果没有获取到(访问时间过长或者是页面丢失),则用之前的数据,获取到了就覆盖,请问一下这个该怎么实...

有时候连接时间过长就会导致有一段较长时间空白,现在我想利用js中的一个变量每隔一段时间去获取json,如果没有获取到(访问时间过长或者是页面丢失),则用之前的数据,获取到了就覆盖,请问一下这个该怎么实现

4条回答
py大白
2楼 · 2021-04-28 17:30

如果是ajax 就直接获取
如果是传到一个页面 就再get
再在js中使用<%=变量名%> 就可以获取了。 可以在js中获取一个变量 但是不能写入一段java代码.

我是大脸猫
3楼 · 2021-04-29 10:38

一、使用js获取接口数据的方法


①$get(url,[data],[callback])


url:请求的地址;data:请求数据的列表;callback:请求成功后的回调函数,该函数接受两个参数,第一个为服务器返回的数据,第二个为服务器的状态,是可选参数。


其中服务器返回数据的格式其实是字符串形式,并不是我们想要的JSON数据格式。上例子:


var url3 = 'http://mshop.gemstc.com/ApiService/msgget.php';  

       $.get(url3,function(data){  

  alert(data);

        

       }); 

此时如果对data采用json解析数据,得到的值为undefined。所以我们使用这种get方法获取到的值要是JSON格式,需要定义获取的数据类型为json格式,上例子:

var url3 = 'http://mshop.gemstc.com/ApiService/msgget.php';  

       $.get(url3,function(data){  

     $('#result').append('

interval:'+data.name+'

')    //此时返回的是JSON格式的内容,例:我们可以使用data.name获取到name字段的值并输出。

          }, 'json'); 


②$post(url,[data],[callback],[type])

post方法中多了一个type:获取数据的类型格式,post其实和get是一样的用法,type不定义,返回的是字符串类型的,定义为json格式,返回的就是json格式的数据,此处可以仿照上面的get方法,把get改成post就搞定了,就不多说了。


③$ajax(opiton)


ajax功能比较强大,自己可以去查相关资料学习了解(http://blog.csdn.net/wolf6699/article/details/50039627),可以有很多精确的控制,这里直接上例子:


$.ajax({

   url: url,

data:{Full:"fu"},

type: "POST",

dataType:'json',

 success:function(data){

      $('#result').append('

interval:'+data.interval+'

')

     //alert("22");    

 },

   error:function(er){

      //alert("11");

       BackErr(er);

 }

});


④$getJSON(url,[data],[callback])


此处参数和get方法是一致的,直接上例子:


$.getJSON(url,function(data){

         alert(data.name);           

    });


以上类型因为接口访问时没有带参数,所以[data]这个参数我都省去了。如果有参数的话,格式为:

{  

    id      : 'Robin',  

    password: '123456',  

    gate    : 'index'  

  }




二、跨域问题的解决


在使用以上方法获取接口数据的过程中,我们突然发现有些接口无法将数据获取展示出来,使用chrome浏览器调试,我们发现报错如图:




此处我们使用设置Access-Control-Allow-Origin来实现跨域访问。


在被请求的Response header中加入


// 指定允许其他域名访问

header('Access-Control-Allow-Origin:*');

// 响应类型

header('Access-Control-Allow-Methods:POST');

// 响应头设置

header('Access-Control-Allow-Headers:x-requested-with,content-type');


这样就可以实现ajax的跨域访问。

此处贴上示例代码以帮助大家上手,例HTML代码:


 

 

  跨域测试

  [removed][removed]

 

 

   

    [removed]

    $.post("http://xxx.xxx.xxx/data.php",{name:"fdipzone",gender:"male"})

      .done(function(data){

        document.getElementById("show")[removed] = data.name + ' ' + data.gender;

      });

    [removed]

 

php代码: http://xxx.xxx.xxx/data.php

$ret = array(

    'name' => isset($_POST['name'])? $_POST['name'] : '',

    'gender' => isset($_POST['gender'])? $_POST['gender'] : ''

);


header('content-type:application:json;charset=utf8');

header('Access-Control-Allow-Origin:*');

header('Access-Control-Allow-Methods:POST');

header('Access-Control-Allow-Headers:x-requested-with,content-type');


echo json_encode($ret);

?>

这里 Access-Control-Allow-Origin:*表示允许任何域名跨域访问。


如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:*改为Access-Control-Allow-Origin:允许的域名

例如:header('Access-Control-Allow-Origin:http://www.baidu.com');



如果需要设置多个域名允许访问,这里需要用php处理一下

例如允许 www.baidu.com 与 www.sina.com 可以跨域访问


$ret = array(

    'name' => isset($_POST['name'])? $_POST['name'] : '',

    'gender' => isset($_POST['gender'])? $_POST['gender'] : ''

);

header('content-type:application:json;charset=utf8');

$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';

$allow_origin = array(

    'http://www.baidu.com',

    'http://www.sina.com'

);

if(in_array($origin, $allow_origin)){

    header('Access-Control-Allow-Origin:'.$origin);

    header('Access-Control-Allow-Methods:POST');

    header('Access-Control-Allow-Headers:x-requested-with,content-type');

}

echo json_encode($ret);

?>



灰机带翅膀
4楼 · 2021-04-29 14:53

定时任务

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


zgzbs
5楼 · 2021-11-24 10:56

根据json数据的格式,需要循环每组数据然后通过字段取出即可。
然后将取出的数据拼接成字符串插入html对象中。
var json_str = [{"id":1,"name":"name1"},{"id":2,"name":"name2"},{"id":1,"name":"name1"}];// 定义的json数据的字符串
str = "";
json_demo=eval("+json_str+")//将json字符串装换成js对象
for(var i=0;i
alert(json_demo[i].id);//取出每组的id
alert(json_demo[i].name);//取出每组的name
str += 'id:'+json_demo[i].id + 'name:'+json_demo[i].name;//将取出的数据拼接成字符串
}
alert(str);//弹出拼接好的字符串查看结果

相关问题推荐

  • 回答 97
    已采纳

    Js给初学者的印象总是那么的杂而乱,相信很多初学者都在找轻松学习Js的途径。在这里给大家总结一些学习Js的经验,希望能给后来的学习者探索出一条轻松学习Js之路。Js给人那种感觉的原因多半是因为它如下的特点:A:本身知识很抽象、晦涩难懂,如:闭包、内置...

  • 回答 4

    看图:

  • 回答 18

    基本类型( 6种 ):Number ( 数值 ) String ( 字符串 )Boolean ( 布尔 ) Undefined ( 未定义 )Null ( 空 )ES6 - Symbol  ( 唯一 )

  • 回答 19

    JavaScript 使网页增加互动性,使有规律地重复的HTML文段简化,减少下载时间。JavaScript 能及时响应用户的操作,对提交表单做即时的检查,无需浪费时间交由 CGI 验证。JavaScript 的特点是无穷无尽的,只要你有创意。...

  • 回答 18

    timeoutId: 定时器IDfunc: 延迟后执行的函数code: 延迟后执行的代码字符串,不推荐使用原理类似eval&#40;&#41;delay: 延迟的时间(单位:毫秒),默认值为0param1,param2: 向延迟函数传递而外的参数,IE9以上支持setInterval: 以固定的时间间隔重复调用一个函...

  • 回答 15

    Number类型String类型Boolean类型Undefined类型Null类型

  • 回答 14

    空格在ASCII中的值为32,空字符为0,可本人觉得不就是都是为空的吗,没有什么区别?char mychar1,mychar2;mychar1=&#39; &#39;;mychar2=&#39;\0&#39;;printf(mychar1=%d,mychar2=%d,mychar1,mychar2);//其中mychar1=32;mychar2=0;...

  • 回答 16

    1.变量名可以有数字0~9、大小写字母、下划线、美元符$组成。2.变量名不能以数字开头。 当我们以数字为开头时,代码就会出现橙色下划线,代表命名不...3.变量名不允许使用中文。 不能允许使用中文这个就不用多说了吧,不管你在哪找代码来看,代码中...4.区分大小写...

  • 回答 8

    向一个对象数组里面添加新的属性var arry= [{a:11,b:22,c:33,d:44},{a:11,b:0,c:0,d:44},{a:11,b:22,c:99,d:99}];var arry2=[];arry.map(((item, index)=> {arry2.push(Object.assign({},item,{mess1:item.c,mess2:item.d}))}))cons...

  • 回答 2

    我觉得getTopWindow() 应该是他自己写的函数 mask  应该是getTopWindow()函数中 return 出的一个什么玩意show()  jQuery的显示

  • 回答 16

    看上图

  • 回答 9

    如图所示

  • 回答 12

    1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...

  • js选项卡的实现原理2021-06-15 21:48
    回答 6

    如图所示,最简单的选项卡思路:选项卡就是点击按钮切换到相应内容,其实就是点击按钮把内容通过display(block none)来实现切换的。1、首先获取元素。2、for循环历遍按钮元素添加onclick 或者 onmousemove事件。3、因为点击当前按钮时会以高亮状态显示,所以...

  • 回答 4

    1、js截取两个字符串之间的内容:123var str = aaabbbcccdddeeefff; str = str.match(/aaa(\S*)fff/)[1]; alert&#40;str&#41;;//结果bbbcccdddeee2、js截取某个字符串前面的内容:123var str = aaabbbcccdddeeefff; tr = str.match(/(\S*)fff/)[1];......

没有解决我的问题,去提问