为什么附加脚本在IE8和IE9中运行两次?

时间:2013-01-29 04:48:06

标签: javascript jquery asp.net

我正在为ASP.NET应用程序做客户端工作,下面的函数适用于各种浏览器:

$('#identifier').click(function () {
    $('#script-placeholder').append('<script type="text/javascript" 
    src="SERVICEURL?callback=test"></script>');
});

当我点击ID为'identifier'的元素时,服务会发回一个包含在JS函数调用中的响应(即

test('response');

但是,在IE8和IE9中,如果我执行一次脚本,导航到另一个页面,然后返回并再次单击“标识符”,回调函数将被调用两次。任何人有任何想法为什么或知道一个变通方法?任何帮助将不胜感激! (注意我在localhost上遇到这个问题)...

2 个答案:

答案 0 :(得分:1)

我知道有两种方法 方法1: -
在调用之前在URL中添加一些额外的参数。

$('#identifier').click(function () {
     $('#script-placeholder').append('<script type="text/javascript" 
    src="SERVICEURL?callback=test&t="+Math.random()></script>');
});

以上只是一个例子。你必须检查你的情况。

另一个是

如果您使用的是generic handler

,请按照以下步骤在服务页面中设置无缓存
    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    context.Response.Cache.SetNoStore();

答案 1 :(得分:0)

感谢大家的回答!在我发布问题之后,我正在阅读,并看到有另一种方式来调用而不是添加脚本标记:jQuery的getScript ...最终为我工作。这是我使用它的方式:

    $('#identifier').click(function () {
        var url = 'SERVICEURL?callback=test'
        $.getScript(url);
    });

希望这有助于将来的某个人!仅供参考:在Jquery网站上做了更多阅读之后,我发现了这个问题(这就是他们解决缓存问题的方法):默认情况下,$ .getScript()将缓存设置设置为false。这会将带时间戳的查询参数附加到请求URL,以确保浏览器在每次请求时都下载脚本。