【问题标题】:CodePen -> getJSON works only in IE but does not in Chrome or FF, why is that?CodePen -> getJSON 仅适用于 IE,但不适用于 Chrome 或 FF,这是为什么呢?
【发布时间】:2018-04-03 06:11:20
【问题描述】:

请帮我小费 我已经创建了这支笔https://codepen.io/Dimas_X/pen/yKEzBE?editors=0010

$(function() { 
  const func = function(){
        let counter = 0;
        return function(){
        $.getJSON("https://quotesondesign.com/wp-json/posts?filter[orderby]=rand&filter[posts_per_page]=1",
          function(data){
            $('p').html(data[0].content + '<p>'+ data[0].title  +'</p>');
          });
          counter++;
          $('span').html(counter);
       }
  }
  $('button').on('click', func());
 // $('button').trigger('click');
});

而且它只能在 IE 中正常工作。在 Chrome 中,它在 devTools 打开时工作。 点击计数器有效,意味着点击事件有效。 控制台没有任何错误。提前谢谢。

【问题讨论】:

    标签: getjson


    【解决方案1】:

    我看到在 Firefox 和 chrome 的网络选项卡中多次发出请求,但每次的响应都是相同的。您的应用程序正在正确填充第一个响应,看起来好像第一个请求正在被缓存。

    如果您有权访问网络服务器代码,则似乎由于wp json 正在使用 wordpress。您应该添加以下代码以确保响应没有被缓存

    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    

    一旦完成,我认为您的代码应该可以正常工作。

    您还可以在前端每次通过设置 url .getJSON("https://quotesondesign.com/wp-json/posts?filter[orderby]=rand&amp;filter[posts_per_page]=1?_=" + new Date().getTime() 来执行对“唯一 url”的查询以防止缓存

    【讨论】:

    • 嗨@Charles,感谢您的回复。我感谢您的帮助。关键是我只在客户端。我无权访问服务器。我只是想知道为什么这段代码不能正常工作。我认为这是我在代码或 codepen 设置中的某个地方的错误
    • @Dimas_X 因为您只能访问前端,所以每次都可以使请求唯一。要做到这一点,而不是静态网址,请将其设为 .getJSON("https://quotesondesign.com/wp-json/posts?filter[orderby]=rand&amp;filter[posts_per_page]=1?_=" + new Date().getTime()
    • 它有效,非常感谢,但你能解释一下它是什么意思 "?_=" 吗?获取请求中的另一个参数?服务器会考虑吗?
    • @Dimas_X 它只是添加了_ 的参数,您可以将其更改为versiontime。这只是允许浏览器每次发出新请求并防止缓存
    • 现在很清楚了,再次感谢您的快速响应!
    猜你喜欢
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多