缓存结果为AJAX

时间:2016-07-24 07:54:08

标签: javascript php ajax caching

我正在尝试从w3schools.com学习AJAX。但我无法理解以下例子:

xhttp.open("GET", "demo_get.asp", true); xhttp.send();

在上面的示例中,您可能会获得缓存结果。要避免这种情况,请在URL中添加唯一ID:

xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true); xhttp.send();

问题1:什么是缓存结果以及如何通过向URL添加唯一ID来避免它?

问题2:当我们向特定的php文件发送请求(数据)时,我们只能通过使用$ _REQUEST全局变量来查看特定文件中的数据,为什么我们不能使用$ _GET全局变量(当我们通过GET发送数据时)方法)?

提前感谢。

3 个答案:

答案 0 :(得分:1)

问题1:

  1. Cached Result

    • 谁缓存?浏览器
    • 什么缓存?:对于每个request(网址),浏览器缓存response(结果)
    • 缓存哪里?浏览器的临时内存(在计算机硬盘中)
  2. "demo_get.asp?t=" + Math.random()

    这会更改每次调用的网址,因此,例如,如果demo_get.asp?t=32332被缓存,则不会影响demo_get.asp?t=43948348。感谢Math.random()

  3. 问题2:

    根据客户端使用的方法,您将能够在服务器端处理请求。

    • GET方法:

         //client side 
          xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true);
        //server side 
           $_GET
      
    • POST方法:

         //client side 
           xhttp.open("POST", "demo_get.asp?t=" + Math.random(), true);
         //server side 
           $_POST
      

答案 1 :(得分:1)

Web缓存只是意味着该文件保留在浏览器中,从而加快了浏览速度,因为您不需要一遍又一遍地获取相同的文件。

1:通过添加随机字符串或时间戳作为参数,浏览器始终将其视为新文件。

remotefile.js?ts = 123与remotefile remotefile.js不同?ts = 124

2:在php 5.3+中,您可以通过查看特定请求类型的全局变量来获取数据。

$_GET holds all get parameters (ie the part of the URL after ?)
$_POST holds an array of all POST.parameters
file_get_contents('php://input') holds the json in a json-request

使用$ _GET看不到附加GET数据的原因是因为get reuest只处理URL参数。如果您想发送数据,请查看POST。

http://www.w3schools.com/jquery/ajax_post.asp

答案 2 :(得分:0)

问题1 通过缓存的结果,我认为这意味着您的浏览器会临时存储/缓存XMLHttpRequest对象检索到的响应。这意味着,下次尝试获取响应时,除非使用的ID与缓存的响应的ID不同,否则您将获得旧的(缓存的响应)。换句话说,唯一的ID可确保您无论何时请求响应都可以访问要从中检索数据的任何文件。