$ .ajax()调用,仅在更新时调用

时间:2010-10-06 08:13:15

标签: javascript jquery ajax http caching

我正在使用$ .ajax()请求读取xml。

$.ajax({
    type: "GET",
    async: false,
    url: "../../../ErrorMessages.xml",
    dataType: "xml",
    success: function (xml) {
       $(xml).find("*[Name='" + Field + "']").each(function () {
          message = $(this).find(Rule).text();
       });
    }
});

我想仅在更新资源 ErrorMessages.xml 时才进行调用。否则使用浏览器缓存。

3 个答案:

答案 0 :(得分:3)

浏览器不知道服务器上是否已更新ErrorMessages.xml。它必须发出检查文件是否已被修改的请求。

您可能希望在jQuery ifModified请求中将true选项设置为$.ajax(),因为默认设置为false

$.ajax({
  type: "GET",
  ifModified: true,
  async: false,
  url: "../../../ErrorMessages.xml",
  dataType: "xml",
  success: function (xml) {
     // ..
  }
});

引用jQuery.ajax() documentation

  

ifModified(布尔)

     

默认值:false

     

仅在自上次请求后响应发生更改时才允许请求成功。这是通过检查Last-Modified标头来完成的。默认值为false,忽略标头。在jQuery 1.4中,这种技术还检查服务器指定的'etag'以捕获未修改的数据。

只要您的Web服务器支持Last-Modified标头,那么对XML的第一个请求将如下所示:

GET /ErrorMessages.xml HTTP/1.1
Host: www.example.com

HTTP/1.1 200 OK
Last-Modified: Wed, 06 Oct 2010 08:20:58 GMT
Content-Length: 1234

但是,对同一资源的后续请求将如下所示:

GET /ErrorMessages.xml HTTP/1.1
Host: www.example.com
If-Modified-Since: Wed, 06 Oct 2010 08:20:58 GMT

HTTP/1.1 304 Not Modified

如果Web服务器发现自If-Modified-Since标题日期以来文件已被修改,它将正常提供文件。

答案 1 :(得分:0)

创建一个名为“updateTimeStamp”的全局变量,并将updatetimestamp放入xml中。然后在执行ajax请求时找到时间戳并将其与保存的ipdateTimeStamp进行比较。如果它更大那么做你需要做的事情,如果不做什么

答案 2 :(得分:0)

看这里:http://jquery14.com/day-01/jquery-14

在jQ 1.4中启用了Etag支持,因此您可以使用它。