Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 如何在页面重新加载的情况下限制api调用的速率?_Javascript_Ajax - Fatal编程技术网

Javascript 如何在页面重新加载的情况下限制api调用的速率?

Javascript 如何在页面重新加载的情况下限制api调用的速率?,javascript,ajax,Javascript,Ajax,假设我使用的是免费API服务,每m分钟调用c 我正在使用一点javascript,它由我非常基本的站点的主html链接,其中包含以下内容: $(function () { //stuff function getSomething() { return $.ajax({ type: 'GET', url: targetURL, data: dataObject, }); }

假设我使用的是免费API服务,每m分钟调用c

我正在使用一点javascript,它由我非常基本的站点的主html链接,其中包含以下内容:

$(function () { 

//stuff

    function getSomething() {
        return $.ajax({
           type: 'GET',
           url: targetURL,
           data: dataObject,
        });
    }

    getSomething().done(function (returnedStuff){
        //process returnedStuff
    });

//more stuff

});
我有两个问题:

  • 每次重新加载页面时是否都会有api调用
  • 如果上面的答案是
    YES
    ,那么如何防止/限制用户/某些其他事件通过重复重新加载页面而超出api限制

谢谢你的帮助

tldr:从您的高级示例中做出一些假设:

  • 每次重新加载页面时是否都会有api调用
  • 如果以上答案是肯定的,那么如何防止/限制 用户/其他一些事件,因为他们的 重复重新加载页面阅读下面的内容
进一步解释: 取决于示例代码是否命中自己的服务器端代码,然后生成API代码……或者是否直接从客户端调用API。如果在重新加载时调用函数(DocumentReady或其他),则每次重新加载时都会执行该函数。否则,显然只有在调用该方法时(如通过单击按钮)

记住,客户端代码对客户端是可见的——因此,如果这是您的体系结构,那么您将向客户端公开API。例如,我可以编写自己的javascript来循环并反复调用您的API

我的假设是数据不需要在每次重新加载时刷新。考虑到这一点,我建议您采取以下措施:

$(function () { 

//stuff

    function getSomething() {
        return $.ajax({
           type: 'GET',
           url: targetURL,
           data: dataObject,
        });
    }

    getSomething().done(function (returnedStuff){
        //process returnedStuff
    });

//more stuff

});
限制API调用的建议方法: 使用ajax调用您自己的服务器。 在服务器端,通过您选择的缓存持久化数据,并构建您自己的逻辑来测试数据是否需要刷新(第一次调用、超时后等)

这样,您就不会向客户端公开API url和详细信息,并且可以控制对API的调用量

出于优化目的,您还可以缓存客户端的数据……但保留服务器端的逻辑和API调用

希望这有帮助

ps.如果您需要一个示例,请提供您正在使用的平台,我将非常乐意为您快速制作一个示例


pps。您只需缓存客户端,然后使用内置的逻辑从客户端调用API来测试缓存,但显然任何人都可以调用您的API。

tldr:从您的高级示例中做出一些假设:

  • 每次重新加载页面时是否都会有api调用
  • 如果以上答案是肯定的,那么如何防止/限制 用户/其他一些事件,因为他们的 重复重新加载页面阅读下面的内容
进一步解释: 取决于示例代码是否命中自己的服务器端代码,然后生成API代码……或者是否直接从客户端调用API。如果在重新加载时调用函数(DocumentReady或其他),则每次重新加载时都会执行该函数。否则,显然只有在调用该方法时(如通过单击按钮)

记住,客户端代码对客户端是可见的——因此,如果这是您的体系结构,那么您将向客户端公开API。例如,我可以编写自己的javascript来循环并反复调用您的API

我的假设是数据不需要在每次重新加载时刷新。考虑到这一点,我建议您采取以下措施:

$(function () { 

//stuff

    function getSomething() {
        return $.ajax({
           type: 'GET',
           url: targetURL,
           data: dataObject,
        });
    }

    getSomething().done(function (returnedStuff){
        //process returnedStuff
    });

//more stuff

});
限制API调用的建议方法: 使用ajax调用您自己的服务器。 在服务器端,通过您选择的缓存持久化数据,并构建您自己的逻辑来测试数据是否需要刷新(第一次调用、超时后等)

这样,您就不会向客户端公开API url和详细信息,并且可以控制对API的调用量

出于优化目的,您还可以缓存客户端的数据……但保留服务器端的逻辑和API调用

希望这有帮助

ps.如果您需要一个示例,请提供您正在使用的平台,我将非常乐意为您快速制作一个示例


pps。您可以简单地缓存客户端,然后从客户端调用API,并内置一些逻辑来测试缓存-但显然,任何人都可以调用您的API。

您是否使用php或asp.net之类的工具?何时调用getSomething()?第一点的答案是肯定的,关于第二点:您可以“防止”(不是真的,因为它是javascript,所以他可以随时调用它)在这样的上下文中,用户可以通过使用cookie或本地存储之类的东西来避免超出api。此外,请记住,您正在客户端计算机上运行脚本,因此您限制了他对api的调用,而不是您的。但是,如果他每次都要获取api,他可以在未经您允许的情况下执行此操作。为了防止hi无论如何,我不会再抓取了,我会使用cookie或localstorage对象。(另外,我假设在加载DOM时,您在页面的某个地方至少调用了一次getSomething函数)我将详细说明,因为每个人都缺少一个非常简单的解决方案。如果您可以在web服务器上编写一个代理类型函数,那么您只需编写一个调用API并缓存数据的web方法(除非每次都更改)如果调用超过API限制,则返回缓存数据。是否使用php或asp.net之类的工具?何时调用getSomething()