相关疑难解决方法(0)

使用属性阻止ASP.NET MVC中的缓存以执行特定操作

我有一个ASP.NET MVC 3应用程序.此应用程序通过JQuery请求记录.JQuery回调一个以JSON格式返回结果的控制器动作.我无法证明这一点,但我担心我的数据可能会被缓存.

我只希望将缓存应用于特定操作,而不是所有操作.

是否有一个属性可以放在一个动作上以确保数据不会被缓存?如果没有,我如何确保浏览器每次都获得一组新记录而不是缓存集?

.net c# asp.net-mvc jquery asp.net-mvc-3

186
推荐指数
5
解决办法
16万
查看次数

强制刷新缓存的CSS数据

是否有可能强制浏览器刷新缓存的CSS?

这并不像每个请求那么简单.我们有一个网站已经有一段时间稳定的CSS.

现在我们需要对CSS进行一些重大更新; 但是,缓存CSS的浏览器将在几天内不会收到新的CSS,从而导致渲染问题.

有没有办法强制刷新CSS或者我们最好只选择版本特定的CSS URL?

css caching

37
推荐指数
2
解决办法
5万
查看次数

在Safari 6中禁用JIT以解决严重的Javascript JIT错误

我们发现我们的Javascript代码的解释存在严重问题,这些代码仅发生在iOS 5/Safari 6(当时的iPad版本)上,我们认为这是由于Safari中的Just in Time JS编译器中的关键错误.(请参阅下面的更新,了解更多受影响的版本和现在似乎包含修复的版本).

我们最初在我们的库的在线演示中发现了这个问题:演示或多或少地随机崩溃,但这只是第二次(甚至更晚)发生相同代码的执行.即如果你运行一部分代码,一切正常,但后续运行会使应用程序崩溃.

有趣的是,在Chrome for iOS中执行相同的代码问题没有显示,我们认为这是由于Chrome for iOS中使用的Webview缺少JIT功能.

经过大量的摆弄,我们终于认为我们发现了至少一个有问题的代码:

  var a = 0; // counter for index
  for (var b = this.getStart(); b !== null; b = b.getNext()) // iterate over all cells
    b.$f = a++; // assign index to cell and then increment 
Run Code Online (Sandbox Code Playgroud)

本质上,这是一个简单的for循环,它将链表中的每个单元格分配给它的索引.这里的问题是循环体中的后增量操作.当前计数被分配给字段并在计算表达式后更新,基本上与首先分配a然后将其递增1相同.

这在我们测试的所有浏览器和Safari中的前几次都可以正常工作,然后突然看起来似乎计数器变量a首先递增,然后分配结果,就像预增量操作一样.

我创建了一个小提琴,显示了这里的问题:http://jsfiddle.net/yGuy/L6t5G/

在带有iOS 6的iPad 2上运行示例并且所有更新结果对于我的情况下的前两次运行是正常的,并且在第三次运行中突然显示列表中的最后一个元素具有指定的值,其中一个是关闭的(输出当你点击"点击我"按钮从"从0到500"变为"从0到501"时

有趣的是,如果你切换标签,或稍等一下,可能会发生突然结果是正确的两次左右的运行!似乎Safari有时重置是JIT缓存.

所以,因为我认为Safari团队可能需要很长时间来修复这个bug(我还没有报告),并且可能还有其他类似的错误,比如潜伏在JIT中同样难以找到的,我想知道是否有办法在Safari中禁用JIT功能.当然这会降低我们的代码(已经非常占用CPU),但速度比崩溃慢.

更新:不出所料,它不仅仅是受影响的后增量运算符,还有后减量运算符.更令人惊讶和更令人担忧的是,如果赋值,则没有区别,因此在现有代码中查找赋值是不够的.例如,下面的代码b.$f = (a++ % 2 == 0) ? 1 : 2;中,变量值未分配,但仅用于三元运算符条件,在某种意义上"失败",有时选择了错误的分支.目前看起来似乎只有在根本不使用邮政运营商时才能避免问题.

更新:同样的问题不仅存在于iOS设备中,而且存在于Safari 6中的 …

javascript safari jit safari6

19
推荐指数
1
解决办法
2452
查看次数

仅允许通过本地服务器上的ajax访问PHP文件

我有一个网站需要根据用户交互增加数据库中的值.当用户单击一个按钮时,会调用php脚本来增加该值.我想保护这个脚本不被外部脚本访问.目前,用户可以使用javascript函数编写自己的网页,该函数反复点击相同的php文件以炸毁数据库中的值.

这是我的jquery代码,用于递增:

jQuery(function(){
$('.votebtn').click(function(e){
    var mynum = $(this).attr('id').substring(0,5);
    $.ajax({
            url:"countvote.php",
            type:"GET",
            data: { 
                thenum:mynum
            },
            cache: false,
            success:function(data) {
                alert('Success!');
                }
            }
        });
});
});
Run Code Online (Sandbox Code Playgroud)

如何才能使本地服务器上的ajax/jquery调用只能访问'countvote.php'?如果这不是正确的方法,我会接受任何可能阻止我的PHP脚本被外部脚本滥用的建议.

php security ajax jquery

14
推荐指数
2
解决办法
2万
查看次数

Windows上的Safari远程调试

随着iOS 6的发布,Apple实现了一项名为远程调试的功能

自从安装新的iOS 6后,客户端遇到了我的webapp问题,我无法弄清楚问题.缓存AJAX请求似乎不是问题,因为错误是随机发生的,问题不是(仅)结果仍然相同.

所以它必须是并行AJAX调用的问题

要找出问题并有效地修复它(而不是在黑暗中磕磕绊绊),我需要一个调试器.我很高兴看到远程调试功能,但我无法让它工作.


现在的问题是:

  • 是否可以在Windows版本的Safari中使用远程调试?
  • 如果是这样,我该如何激活它?

windows safari remote-debugging ios6

12
推荐指数
2
解决办法
3万
查看次数

将jQuery $ .post()中的缓存设置为false?

我有这个代码:

$.post("php/tagNotifUnsub.php", $("#tagNotifUnsub").serialize(), function(){ 
            $('#tagSubDiv').load('tags.php #tagSubDiv', function(){$( "button, input:submit, input:button, a#jql, input:radio" ).button();});      
        });
Run Code Online (Sandbox Code Playgroud)

我知道$ .post只是$ .ajax的另一个名字.我知道默认情况下$ .ajax有缓存.我希望它被解除.我怎样才能做到这一点?

jquery

10
推荐指数
2
解决办法
2万
查看次数

iOS6 - 有没有办法清除缓存的ajax POST请求添加到主屏幕的webapp?

iOS6 ajax POST请求缓存对我们的webApp来说正成为一个巨大的问题.我们的大多数用户已将应用添加到主屏幕.自升级以来,大多数对后端的POST请求都不起作用,数据在6天前就已过时且数不胜数.我们知道要解决这个问题的两个解决方法,一个是更改每个POST请求,以便通过向其添加时间戳或一些随机输入来改变它,第二个是禁用Web服务器上的缓存.

以下文章详细介绍了这两种解决方法: iOS 6上的Safari是否缓存$ .ajax结果?

如果在iOS6升级之前(或之后)设置,则关闭Web服务器上的缓存可以解决问题.但是,似乎任何自升级以来所做的POST请求,直到我们从添加到主屏幕的应用程序转为缓存时,仍然会被缓存!我们找不到清除它们的方法.删除主屏幕应用程序并重新启动设备不起作用!除了关闭网络服务器上的缓存之外,我们唯一的选择是更改我们的URL或为每个请求添加时间戳.

有没有人知道清除主屏应用程序缓存的方法,除了恢复到工厂?请提供详细信息.

通过在不关闭服务器上的缓存的情况下向其请求添加时间戳来实施解决方法的任何人发出警告.如果您的应用程序已添加到主屏幕,现在每个帖子都会被缓存,并且似乎没有过期.除非有人有办法清除它,否则这看起来像是潜在的内存泄漏!

javascript ajax jquery ios6

9
推荐指数
1
解决办法
2416
查看次数

阻止iOS 6缓存Ajax POST请求

可能重复:
iOS 6上的Safari缓存$ .ajax结果吗?

我有一个混合应用程序使用PhoneGap它在Android和iOS上运行良好.但是当我开始在iOS 6中测试时,我注意到我没有获得大多数ajax调用的服务器数据 - 而是从先前的ajax调用中获取缓存数据.

到目前为止,我已尝试以下选项来禁用缓存 -

  1. 包含时间戳作为查询字符串参数
  2. $.ajaxSetup({ cache: false });
  3. 在ajax电话里面 no-cache = true
  4. $.ajaxPrefilter(function (options, originalOptions, jqXHR) { options.data = jQuery.param($.extend(originalOptions.data||{}, { timeStamp: new Date().getTime() })); });

但这些似乎都没有奏效.我从我的ajax调用中调用Java动作类 - 它是否与上面列出的方法失败的原因有关?

safari ajax caching cordova ios6

7
推荐指数
2
解决办法
1万
查看次数

macOS Safari 缓存响应,而标头指定不缓存

服务器对 GET 请求的响应具有以下标头:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Pragma: no-cache
Date: Thu, 08 Feb 2018 19:16:26 GMT
Cache-Control: no-cache, no-store, must-revalidate
Server: Microsoft-IIS/10.0
Content-Length: 801
Expires: -1
Content-Encoding: deflate
X-Powered-By: ASP.NET
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 5.2
Run Code Online (Sandbox Code Playgroud)

现在 4 秒后,浏览器 (macOS Safari 11.0.3) 发出相同的请求。开发者控制台显示响应来自缓存。我不明白为什么 Safari 甚至缓存响应:

  • Expires 是无效值,不应缓存响应
  • Cache-Control: no-cache,不应缓存响应
  • Cache-Control: no-store,不应缓存响应
  • Cache-Control: must-revalidate,至少应该验证响应,服务器日志中没有这样的请求
  • Pragma: no-cache,不应缓存响应

因此,尽管所有标头都明确说明是否应缓存响应,但 Safari 选择缓存响应。为什么?

为了完整起见,请求如下所示:

GET (...) HTTP/1.1
Host: (...)
Referer: (...)
Accept: application/json, text/javascript, */*; q=0.01
Connection: keep-alive
Accept-Encoding: br, gzip, …
Run Code Online (Sandbox Code Playgroud)

safari caching

6
推荐指数
1
解决办法
5087
查看次数

在ios Safari 6中的Ajax发布请求不起作用

升级到iOS6.0发布后,ajax登录页面停止工作.即使在添加随机查询字符串参数并将Cache-control设置为"no-cache"(这些在网络上找到作为缓存问题的解决方案)后,看起来jquery $ .ajax发出的ajax post请求也会缓存在safari中.第一次登录尝试工作正常,但在第二次登录请求浏览后,浏览器没有从服务器获取任何响应正文.只有标题.

同样适用于IOS 6 GM和5版本以及所有桌面浏览器.

有任何想法吗?

javascript ajax mobile-safari ios ios6

5
推荐指数
1
解决办法
6809
查看次数

$("form").submit 在 ipad 和 iphone 上不起作用

我有一个简单的帖子表单,可以在所有浏览器中使用,但是当它到达 ipad/iphone 时(顺便说一下,我是 iOS 这个世界的新手),我遇到了问题。

<form action="/Home/Contact" id="contactform" method="post" novalidate="novalidate">                
<div class="response"></div>
    <p>
        <input class="textfield" data-val="true" data-val-length="The Name must be 50 characters or less" data-val-length-max="50" data-val-regex="The Name should not contain special characters" data-val-regex-pattern="^[A-Za-z0-9-_ ]+$" data-val-required="The Name field is required." id="Name" name="Name" placeholder="Name" type="text" value="">
        </p><div class="error-holder"><span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span></div>
    <p></p>
    <p>
        <input class="textfield" data-val="true" data-val-email="The Email field is not a valid e-mail address." data-val-length="The Email must be 200 characters or less" data-val-length-max="200" data-val-required="The Email field is required." id="Email" name="Email" placeholder="Email" …
Run Code Online (Sandbox Code Playgroud)

javascript iphone jquery ipad asp.net-mvc-5

5
推荐指数
1
解决办法
9954
查看次数

尽管设置了"No Store",但iPad缓存了AJAX响应

我有一个页面,它执行AJAX请求以获取数据,然后由用户进行修改.使用iPad时,如果用户进行了更改,然后离开页面,然后返回 - AJAX请求不会重新运行 - 这意味着旧数据被加载(可能来自iPad的浏览器缓存).

我的服务器代码是ASP.NET Forms,我尝试使用我能找到的所有设置设置无缓存:

Context.Response.Cache.SetNoStore()
Context.Response.Cache.SetETag(New Guid().ToString())
Context.Response.Cache.SetExpires(New DateTime())
Context.Response.Cache.SetNoServerCaching()
Context.Response.Cache.SetCacheability(HttpCacheability.NoCache)
Context.Response.Expires = 0
Run Code Online (Sandbox Code Playgroud)

但没有运气.有任何想法吗?

javascript asp.net safari ajax ipad

4
推荐指数
1
解决办法
2552
查看次数

通过AJAX设置时,不保留iOS 6 Mobile Safari会话变量

可能重复:
iOS 6上的Safari缓存$ .ajax结果吗?

我在移动Safari iOS 6中遇到了通过AJAX设置的会话变量的问题.我提供了一个示例,它将设置会话变量,重定向到另一个页面,放弃会话并重新开始.这前两次工作正常.在第三次通过该过程时,会话变量丢失.问题只发生在iOS 6 safari中.它适用于我尝试过的所有其他浏览器.

该样本包含3页.Page1设置会话变量并重定向到第2页.Page 2显示会话变量.第3页放弃了会话变量.

第1页HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="sm" runat="server" EnablePageMethods="true">
            <Scripts>
                <asp:ScriptReference Path="~/Page1.js" />
            </Scripts>
        </asp:ScriptManager>
        <div onclick="setSessionVariable()">Set session variable and redirect to page 2</div>
    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

第1页Javascript:

function setSessionVariable() {
    PageMethods.SetSessionVariable(displaySetSessionVariable);
}

function displaySetSessionVariable(bReturn) {
    window.location = "Page2.aspx";
}
Run Code Online (Sandbox Code Playgroud)

第1页代码:

using System.Web.Services;

namespace SafariSessionProblem {
    public partial class Page1 : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {

        }

        [WebMethod]
        public …
Run Code Online (Sandbox Code Playgroud)

ajax session-variables mobile-safari ios6

4
推荐指数
1
解决办法
5912
查看次数