两次请求怎么共享变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两次请求怎么共享变量相关的知识,希望对你有一定的参考价值。

在两次请求之间共享变量,需要使用一些持久化的方式来保存变量的状态,以便后续请求可以读取和更新该状态。以下是几种常见的实现方式:

1. 数据库:将变量的值保存在数据库中,下一次请求从数据库中读取该值,再根据实际情况进行更新。这种方式适用于需要长期持久化且需要频繁访问的变量。

2. 缓存:将变量的值保存在缓存中,下一次请求直接从缓存中读取该值,再根据实际情况进行更新。这种方式适用于需要频繁访问但不需要长期保存的变量。

3. 文件:将变量的值保存在文件中,下一次请求从文件中读取该值,再根据实际情况进行更新。这种方式适用于对访问速度要求不高的变量,如配置文件等。

无论使用何种方式,都需要保证变量在多个请求之间的一致性,避免因为并发操作或多线程操作而导致数据不一致或冲突。
参考技术A 可以使用全局变量来实现两次请求之间的变量共享,即在客户端和服务器端都声明一个变量,并让它们指向同一个位置,从而实现变量共享。另外,可以使用Session或Cookie来实现两次请求之间的变量共享,只需在服务器端将变量存储到Session或Cookie中,然后在客户端读取这些变量即可实现变量共享。 参考技术B 1. 使用全局变量:在程序中定义一个全局变量,可以被所有函数和线程共享,它完全在内存中,两个线程可以方便地访问全局变量,实现共享变量。
2. 使用队列:使用队列可以实现两个线程之间的变量共享,线程A将需要共享的数据放入队列中,线程B取出数据,这样可以实现变量的共享。
3. 使用共享内存:使用共享内存可以实现两个线程之间的变量共享,可以申请一块共享内存,两个线程都可以访问同一块共享内存中的变量,实现变量的共享。

为啥axios请求接口会发起两次请求

如果只是普通的 ajax 请求,也不会发起这个请求,只有当 ajax 请求绑定了 upload 的事件并且跨域的时候,就会自动发起这个请求。
这样就明了了,就是我们有upload事件绑定(一般都是本地调试,所以会有跨域),我仔细看了下axios文档,发现config配置文件中有两个参数
// onUploadProgress: function(progressEvent)
// // Do whatever you want with the native progress event
// ,
// onDownloadProgress: function(progressEvent)
// // Do whatever you want with the native progress event
// ,
分别处理上传和下载事件,也就是这里绑定了upload事件,所以每次请求都会有个option请求。
解决方案很简单,直接注释掉就好了,当然如果开发的工程上线使用跟请求的接口是同一个域名下自然不会两次请求。
参考技术A

因为vue-resource不在更新,vue推荐使用axios,所以使用axios。 
在页面交互过程中,发现axios一定几率会发送两次请求,一次是自己设置的请求方式,还有一次是options。 
关于这个问题,在各个网站寻求原因,得出以下结论: 
跨域资源共享标准新增了一组 HTTP 首部字段,允许服务器声明哪些源站有权限访问哪些资源。另外,规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求),浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。服务器确认允许之后,才发起实际的 HTTP 请求。在预检请求的返回中,服务器端也可以通知客户端,是否需要携带身份凭证(包括 Cookies 和 HTTP 认证相关数据)。 
也就是说,它会先使用options去测试,你这个接口是否能够正常通讯,如果不能就不会发送真正的请求过来,如果测试通讯正常,则开始正常请求。 
关于这个问题,需要在后台进行设置,允许options请求,不然你的请求就会受到影响,后台并作出判断,如果请求方式为options,告诉它可以通讯,其他直接什么都不做。 
以下是PHP做设置内容 

header("Access-Control-Allow-Origin:*"); 
header("Access-Control-Allow-Headers:content-type"); 
header("Access-Control-Request-Method:GET,POST"); 
if(strtoupper($_SERVER['REQUEST_METHOD']) == 'OPTIONS') 
    exit; 

以上是关于两次请求怎么共享变量的主要内容,如果未能解决你的问题,请参考以下文章

具有共享对象引用的两个变量的总大小是多少? [复制]

是否可以为进程间通信提供共享全局变量?

Flask 中的全局变量是线程安全的吗?如何在请求之间共享数据?

进程共享条件变量:一个进程死后如何恢复?

如何将变量放入共享内存中? [复制]

慕课网学习笔记Java共享变量的可见性和原子性