2012-01-16 30 views
0

我想在注销时创建cookie的会话删除方法。jQuery.cookies不会动态加载(使用jQuery getScript等)

有一定启动键的Cookie需要删除,所以我做了一个小小的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());无法正常工作。

问题是,当deleteCookies的回调被触发时,jquery_cookies_min.js文件未被加载,所以我得到控制台错误cannot call method 'filter' of undefined

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

我已经检查和双重检查一百万次的位置是正确的......而事实上,它的工作原理,如果我手动包括JS文件...我还没有试过前面的/

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

编辑:我也试图与使用appendChild元法按在我加载jQuery的方式...相同的结果

回答

0

因为你的第二个参数是一个函数调用,而不是一个函数的定义或参考。

尝试从deleteCookies()或使用移除():

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

完美!谢谢 – 2012-01-16 13:24:02