Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不要为同一输入多次调用AJAX_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript 不要为同一输入多次调用AJAX

Javascript 不要为同一输入多次调用AJAX,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,假设我在网页上有一组预加载的图像。从列表中选择任何图像时,会向另一个服务发出AJAX请求,该服务返回与所选图像相关的包含多个HTML元素的HTML负载。返回后,HTML负载将放置在所选div的下面。 我无法更改此服务返回数据的内容和方式 我需要防止以下情况:如果在一页加载期间用户已经单击了图像(已经为图像制作了AJAX),则避免执行AJAX请求。本质上,我希望我的ajax请求在每次页面加载时最多发生一次。 注意:我无法更改使用ajax调用的服务的输出。我所能做的就是将ajax请求的html响应放

假设我在网页上有一组预加载的图像。从列表中选择任何图像时,会向另一个服务发出AJAX请求,该服务返回与所选图像相关的包含多个HTML元素的HTML负载。返回后,HTML负载将放置在所选div的下面。 我无法更改此服务返回数据的内容和方式

我需要防止以下情况:如果在一页加载期间用户已经单击了图像(已经为图像制作了AJAX),则避免执行AJAX请求。本质上,我希望我的ajax请求在每次页面加载时最多发生一次。 注意:我无法更改使用ajax调用的服务的输出。我所能做的就是将ajax请求的html响应放入某个div中


这种问题的常见jquery/javascript解决方案是什么?

您需要做的是创建一个函数,将AJAX请求的结果存储在一个对象中,该键是请求的源

编写函数时,如果该对象具有请求的键,则返回“缓存”内容,否则会发出AJAX请求,结果存储在“对象”中


鉴于AJAX是异步的,实现这一点的最简单方法是使用承诺。这样,您可以立即将承诺存储在“对象”中,并立即返回承诺。由于可以根据给定的承诺执行
.then
(或
wait
)任意次数,这意味着在调用执行缓存的函数时,应该期望返回一个承诺,并在
异步
函数中使用
.then
(或
wait
)要正确访问AJAX数据的结果

“我无法更改使用AJAX调用的服务的输出…”啊,我很困惑,您是否仍然能够添加
脚本
s?如果是,考虑到目前为止的尝试。可以简单地将一个类添加到图像…或者可能需要一个缓存对象。确实没有提供太多细节。向我们展示“选择图像”的含义以及ajax如何与之关联,以及在这些选择之间页面中存在的内容“缓存”每个ajax请求的结果,您可以使用这些变量来确定是否需要再次发出ajax请求。这可能会有所帮助: