【问题标题】:AJAX post working second time onlyAJAX 帖子仅第二次工作
【发布时间】:2017-03-08 11:57:00
【问题描述】:

我有一个表单,我可以在该表单上对网络服务进行 POST。在表单的提交按钮后面我有这个 jquery 代码:

$("#msform").submit(function (e) {
    $.ajax({
        url:'https://example',
        type:'POST',
        data:formData1,
        crossDomain: true,
        dataType: 'json',
        jsonpCallback: 'callback',
        success: function(data) {
            console.log(data);
        }
    });
});

现在这段代码过去可以工作,但是当我更改缓存控件时,它似乎不起作用..

在我的 html 中,我有这个用于缓存控制的代码:

<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="-1" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />

我添加了这个缓存控件,因为我希望用户在上传时看到网站上的新更改。过去他们需要点击 CTRL+F5 来查看新的更改或使用新的 javascript。

过去,当 AJAX 工作时,我有这行:我改为:

现在,当用户提交表单时,将不会收到帖子。但是如果用户返回表单页面,再次提交数据,就会收到post。

有什么方法可以不保存缓存但继续做 AJAX Posts?

--编辑

我删除了 ajax 帖子并将其替换为 php 帖子

【问题讨论】:

  • 试过this一个?
  • @SulthanAllaudeen 好的,我会试试这个,我可以让它在 -1 或 0 上:
  • 即使在?random=123456789 之类的帖子请求中,您也可以在 URL 中添加一些内容
  • @Bdy 0 我猜应该足够了。先试试隐身模式..
  • 仍然不起作用,网站上可以看到更改,但仍未收到帖子。如果我收到任何数据,也许我需要与wireshark核实

标签: javascript jquery html ajax


【解决方案1】:

如果您指的是确保他们看到您上传的最新版本的代码,您只需将版本变量添加到您希望浏览器重新加载的文件中。任何时候更新,您都可以增加版本变量。 例如:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js?version=2.3"></script>

通过更改版本号“?version=2.3”的值,下次请求将不会从缓存中拉出。但它会一直持续到您再次更改它,因此您将受益于缓存仍然可以大大加快您的 Web 应用程序的速度。 对 css、html 或任何其他静态内容也可以这样做。

【讨论】:

    【解决方案2】:

    您的数据类型可能还需要dataType: 'jsonp'。但是向您的 ajax 选项添加 cache: false 可能会起作用:

    $.ajax({
        cache: false,
        url:'https://example',
        type:'POST',
        data:formData1,
        crossDomain: true,
        dataType: 'json',
        jsonpCallback: 'callback',
        success: function(data) {
            console.log(data);
        }
    });
    

    缓存(默认:true,对于 dataType 'script' 和 'jsonp' 为 false)

    如果设置为 false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为 false 仅适用于 HEAD 和 GET 请求。它通过将“_={timestamp}”附加到 GET 参数来工作。其他类型的请求不需要该参数,除非在 IE8 中对已由 GET 请求的 URL 进行 POST。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 2023-03-11
      • 2018-01-07
      相关资源
      最近更新 更多