【问题标题】:jQuery.cookies won't load dynamically (with jQuery getScript etc)jQuery.cookies 不会动态加载(使用 jQuery getScript 等)
【发布时间】:2012-01-16 12:34:28
【问题描述】:

我正在尝试为注销时的 cookie 创建会话删除方法。

需要删除带有特定启动键的cookies,所以我做了一个可以工作的小javascript。

为了将我的所有注销代码保存在一个地方,我正在尝试动态添加 Javascript。

在我的代码背后,我正在执行以下操作:

    Dim logoutJS As String = ""
    logoutJS += "function loadJQuery(callback) {  "
    logoutJS += "var addJquery = document.createElement('script'); " '// add jQuery to document
    logoutJS += "addJquery.onload = callback;  "
    logoutJS += "addJquery.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'; "
    logoutJS += "document.getElementsByTagName('head')[0].appendChild(addJquery); "
    logoutJS += "  }; "
    logoutJS += "function loadCookies() { " '// now jQuery is loaded we can used getScript
    logoutJS += "$.getScript('/Scripts/jquery_cookies_min.js', deleteCookies()); "
    logoutJS += "  };"
    logoutJS += "function deleteCookies() { "  
    logoutJS += "var cookieSettings = $.cookies.filter(/^hgAdmin/); "
    logoutJS += "$.each(cookieSettings, function (cookieName, content) { "
    logoutJS += "$.cookies.del(cookieName); });        "
    logoutJS += "window.location = ('/login.aspx'); };"
    logoutJS += "loadJQuery(function() { loadCookies(); }); "

    Common.logOut(Session)
    ScriptManager.RegisterStartupScript(form1, GetType(HtmlGenericControl), "form1", logoutJS, True)

显然 logoutJS 是在注销页面加载时要调用的 Javascript,然后重定向回登录。

当手动插入页面并对插入的 JS 文件进行物理编码时,效果很好。

但是,当动态插入时,$.getScript('/Scripts/jquery_cookies_min.js', deleteCookies()); 无法正常工作。

问题是,jquery_cookies_min.js 文件在触发运行deleteCookies 的回调时未加载,因此我收到控制台错误cannot call method 'filter' of undefined

如果我将 getScript 加载的脚本更改为不同的脚本,例如 jQuery 的另一个副本,然后它会加载(我可以看到 Chrome Network 控制台显示 jQuery laoded 两次),但它不会加载这个 Cookies 文件。

我已经检查并仔细检查了一百万次位置是否正确...确实,如果我手动包含 JS 文件,它会起作用...我也尝试过不使用前面的 /

为什么这个脚本没有加载?!

编辑:我也按照加载 jQuery 的方式尝试了 appendChild 元素方法......结果相同

【问题讨论】:

    标签: jquery cookies getscript jquery-cookie


    【解决方案1】:

    因为您的第二个参数是函数调用,而不是函数定义或引用。

    尝试从 deleteCookies() 中删除 () 或使用:

    $.getScript('/path', function () { deleteCookies() });
    

    【讨论】:

      猜你喜欢
      • 2014-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      相关资源
      最近更新 更多