单击按钮时获取新的JSON对象(jQuery)

时间:2017-02-08 03:07:30

标签: javascript jquery json quote

我是webdev的新手,我正在尝试构建一个只需点击按钮hash.sort! { |a, b| b[:distance] <=> a[:distance] } 即可获得新报价的网络应用。

这是我的js代码:

project_dependents

任何帮助都会受到赞赏。

以下是感兴趣的人的代码: https://codepen.io/tadm123/pen/YNvdyr

4 个答案:

答案 0 :(得分:1)

您的代码100%正确。恰好,浏览器正在缓存您正在访问的URL的结果。我注意到Codepen正在缓存结果,当我用计算机上的文件测试时,我的浏览器也在缓存它。因此,在第一次点击该URL之后,它会想到“哦,我已经去过这个URL了,我已经知道了结果是什么。所以为了节省时间,我会给它一样的以前的数据。“

要解决这个问题(这可能被视为hacky?),请将当前时间添加到URL的末尾(因为时间总是不同的),如下所示:

function get_new(){
    var currentDate = new Date().getTime(); // create new date
    $.getJSON("http://quotesondesign.com/wp-json/posts?filter[orderby]=rand&date=" + currentDate, function(a) {  // add it to end of URL
        var quote = a[0].content.slice(3,-6);
        var author = '- ' + a[0].title;
        var my_quote = $('<i class="fa fa-quote-left"></i> ' + quote + ' <i class="fa fa-quote-right"></i>');

        $('.quoteBody').html(my_quote);
        $('.quoteAuthor').html(author);

        // tweet the quote
        $("#tweet").click(function(){
          $(this).attr('href', 'https://twitter.com/intent/tweet?text='+ '"'+ quote + '" - ' + author).attr("target","_blank");
        });
    });
}

有时候结果会慢慢来,但我认为这是因为您要求报价的服务器的速度。另一个挑战可能是在从服务器获取报价时显示加载程序。

答案 1 :(得分:1)

正如其他人所指出的那样,它只是codepen上的缓存问题。

将此行添加到您的代码中以设置缓存false:

    private static void manipulateWithCopy(PdfReader reader,String result)
        throws IOException, DocumentException {
    int n = reader.getNumberOfPages();
    Document document = new Document();
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(result));
    document.open();
    for (int i = 0; i < n;) {
        copy.addPage(copy.getImportedPage(reader, ++i));
    }
    document.close();
}
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    try{
    String path= "path/of/the/file/in/the/smb/storage";
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(null, "username", "password");//storing authentication details
        SmbFile sFile = new SmbFile(path, auth);
        FileOutputStream fileOutputStream;
        InputStream fileInputStream;
        String destFilename = "path/to/the/file";
        fileOutputStream = new FileOutputStream(destFilename);
        fileInputStream = sFile.getInputStream();
        byte[] buf;
        int len;
        buf = new byte[16 * 1024 * 1024];
        while ((len = fileInputStream.read(buf)) > 0) {
            fileOutputStream.write(buf, 0, len);
        }
        InputStream inputPdf = new FileInputStream(destFilename);
        PdfReader reader= new PdfReader(inputPdf);
        reader.selectPages(stpg+"-"+endpg);
        manipulateWithCopy(reader,destFilename);
        reader.close();
    }
    catch(Exception e){
        System.out.println(e);
    }
}

在现场环境中小心使用它,您不希望使用cache:false来影响所有ajax请求。因此,我建议您使用普通的jQuery ajax调用,并将属性缓存专门设置为false,仅限于此函数:

$.ajaxSetup({ cache: false });

答案 2 :(得分:0)

将缓存false设置在您的网址中。这是因为您一次又一次地获得相同的数据

https://quotesondesign.com/wp-json/posts?filter[orderby]=rand&filter[posts_per_page]=1&cache=false&callback

答案 3 :(得分:0)

关闭...要使控制台关闭,$.ajaxSetup({ cache: false });无法正常工作。但是,随机化URL确实:

$.getJSON("https://quotesondesign.com/wp-json/posts?filter[orderby]=rand&filter[posts_per_page]=1&callback=&cache="+Math.random(), function(a) {