JS中一个方法同时发送两个ajax请求出现报错问题的解决方法

Posted nanke_yh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中一个方法同时发送两个ajax请求出现报错问题的解决方法相关的知识,希望对你有一定的参考价值。

目录

1、背景介绍

2、分析原因

3、解决办法


1、背景介绍

       在实现前端显示后端数据时遇到这样一个问题:在js同一个方法中调用2个ajax,其中ajax1与ajax2之间没有联系,但是为了看效果需要同时请求数据显示,运行程序却报错,如下图ajax1是蓝色的线,路径规划;ajax2是红色的点,起止点附近的节点。

两个请求独立封装的,为了显示同时按串行请求2个ajax时,出现报错的信息如下:

1、前端页面未响应且控制台报错

已阻止跨源请求:同源策略禁止读取位于url1的远程资源。(原因:CORS请求失败)

已阻止跨源请求:同源策略禁止读取位于url2的远程资源。(原因:CORS请求失败)。

2、IDEA后台崩溃,错误信息

#

# A fatal error has been detected by the Java Runtime Environment:

#

#  SIGSEGV (0xb) at pc=0x00007f84985ce34a, pid=109590, tid=0x00007f84447d3700

#

# JRE version: Java(TM) SE Runtime Environment (8.0_221-b11) (build 1.8.0_221-b11)

# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.221-b11 mixed mode linux-amd64 compressed oops)

# Problematic frame:

# C  [libc.so.6+0x7f34a]  fread+0x1a

#

# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again

#

# An error report file with more information is saved as:

# /home/demo/hs_err_pid109590.log

#

# If you would like to submit a bug report, please visit:

#   Crash Report

# The crash happened outside the Java Virtual Machine in native code.

# See problematic frame for where to report the bug.

#

2、分析原因

        从异步请求的执行原理来看,我们知道当一个异步请求发送时,浏览器不会处于锁死、等待的状态,从一个异步请求发送到获取响应结果的期间,浏览器还可以进行其它的操作。这就意味着多个异步请求的执行是并行的

        两个ajax异步请求冲突,因为异步问题在调用两个ajax异步时,其实相当于同时发送两个请求。执行的快与慢,就要看响应的数据量的大小及后台逻辑的复杂程度。

3、解决办法

        当然针对这个问题而言还有很多解决办法,这里提供三种解决方案:

(1)Ajax2()方法的执行放到Ajax1()的success回调函数的最后一行。【由于两者没有联系该方法能够达到要求,但是逻辑上不对】

(2)Ajax1()的异步请求方法中,增加一个回调函数 :complete : Ajax2。【可尝试】

(3)把Ajax1()的异步设为同步:async : false。【本人采用的解决方法,的确解决了问题】

 参考:https://blog.csdn.net/qq_34059693/article/details/83413559

以上是关于JS中一个方法同时发送两个ajax请求出现报错问题的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

jQuery的$.ajax方法支持同时创建多个异步ajax请求吗?而且这些ajax对象必须是并行处理的

Ajax方式上传文件报错"Uncaught TypeError: Illegal invocation"

JS Ajax异步请求发送列表数据后面多了[]

ThinkPHP 中使用 IS_AJAX 判断原生 JS 中的 Ajax 出现问题

有没有方法可以使得前一个ajax请求没有处理完毕前,下一个ajax请求先等待?

jquery中使用ajax发送post请求变成get请求