Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript函数参数的值如何在页面请求中保持不变?_Javascript_Asp.net_Ajax_Scope - Fatal编程技术网

javascript函数参数的值如何在页面请求中保持不变?

javascript函数参数的值如何在页面请求中保持不变?,javascript,asp.net,ajax,scope,Javascript,Asp.net,Ajax,Scope,我正在调查我继承的一个站点中的一个bug,我的调查提出了一个有趣的javascript范围问题。下面的代码已简化为仅显示相关详细信息 下面的通用服务存在一个问题,即它有时在注销后不返回任何数据(当然,仅在生产环境中)。当这种情况发生时,我们看到ApplyToolbarBindings的“data”参数不是null或空对象——它实际上是由上一个页面请求中的状态生成的。该对象的状态通过asp.net回发得以保留,换句话说,其净效果是,即使在用户注销后,工具栏仍显示“已知”用户 function Ap

我正在调查我继承的一个站点中的一个bug,我的调查提出了一个有趣的javascript范围问题。下面的代码已简化为仅显示相关详细信息

下面的通用服务存在一个问题,即它有时在注销后不返回任何数据(当然,仅在生产环境中)。当这种情况发生时,我们看到ApplyToolbarBindings的“data”参数不是null或空对象——它实际上是由上一个页面请求中的状态生成的。该对象的状态通过asp.net回发得以保留,换句话说,其净效果是,即使在用户注销后,工具栏仍显示“已知”用户

function ApplyToolbarBindings(data) {
    if (!data.IsKnown) {
        jQuery("#ToolBar").attr("data-bind", 'template: { name: "AnonymousUserToolbarTemplate" }');
    } else {
        jQuery("#ToolBar").attr("data-bind", 'template: { name: "KnownUserToolbarTemplate" }');
    }
    ko.applyBindings(data, document.getElementById('ToolBar'));
}
function GetToolBarData(callbackFunction) {
    jQuery.ajax({
        url: '/Services/Toolbar/ToolBarService.ashx?v=' + toolbarV,
        success: callbackFunction,
        dataType: 'json',
        type: 'GET'
    });
}
function loadToolbar() {
    GetToolBarUserData(ApplyToolbarBindings);
}
jQuery(function () { loadToolbar(); });

当函数被全局定义时,函数参数的生命周期是什么?这是因为没有返回数据时ajax对象状态不变吗?

这与JavaScript作用域无关;页面加载之间不存在范围这样的事情

您会发现浏览器(或用户和服务器之间的某个设备)正在将AJAX请求缓存到
'/Services/Toolbar/ToolBarService.ashx?v='+toolbarV


您可以通过使用(有效地向URL添加一个随机字符串以停止缓存)或通过发出正确的
缓存控制
头(
无缓存
)来解决此问题。

这与JavaScript作用域无关;页面加载之间不存在范围这样的事情

您会发现浏览器(或用户和服务器之间的某个设备)正在将AJAX请求缓存到
'/Services/Toolbar/ToolBarService.ashx?v='+toolbarV


您可以通过使用(有效地将随机字符串添加到URL以停止缓存)或通过发出正确的
缓存控制
头(
无缓存
)来解决此问题。

在大多数服务器上,您都有会话、应用程序和请求范围。这意味着,js作用域在请求作用域之下的某个位置,因为它在设置请求并获得响应后存在很短时间

如果您想要一个作用域值,可以使用模板系统和bean。(速度、JSF或其他)。如果不是

你可以用饼干

/**
 * deletes a cookie
 **/
function deleteCookie(c_name) {
    now = new Date();
    document.cookie=c_name+"=; expires="+now.toGMTString();
}

/**
 * sets a cookie
 **/
function setCookie(c_name,value,exdays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
}

/**
 * Returns the cookie Value with unescaped content
 **/
function getCookie(c_name) {
    var i,x,y,ARRcookies=document.cookie.split(";");
    for (i=0;i<ARRcookies.length;i++) {
        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
        x=x.replace(/^\s+|\s+$/g,"");
        if (x==c_name) {
            return unescape(y);
        }
    }
}
/**
*删除cookie
**/
函数deleteCookie(c_名称){
现在=新日期();
document.cookie=c_name+“=;expires=“+now.togmString();
}
/**
*设置一个cookie
**/
函数setCookie(c_名称、值、exdays){
var exdate=新日期();
exdate.setDate(exdate.getDate()+exdays);
var c_value=escape(value)+(exdays==null)?“”:“expires=“+exdate.toutString());
document.cookie=c_name+“=”+c_值;
}
/**
*返回包含未切换内容的cookie值
**/
函数getCookie(c_名称){
变量i,x,y,ARRcookies=document.cookie.split(“;”);

对于(i=0;i,在大多数服务器上,您都有会话、应用程序和请求作用域。这意味着,js作用域在请求作用域之下的某个位置,因为它在设置请求并获得响应后存在很短时间

如果你想要一个限定范围的值,你可以使用一个模板系统和bean(velocity,JSF或者其他任何东西)

你可以用饼干

/**
 * deletes a cookie
 **/
function deleteCookie(c_name) {
    now = new Date();
    document.cookie=c_name+"=; expires="+now.toGMTString();
}

/**
 * sets a cookie
 **/
function setCookie(c_name,value,exdays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + exdays);
    var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
    document.cookie=c_name + "=" + c_value;
}

/**
 * Returns the cookie Value with unescaped content
 **/
function getCookie(c_name) {
    var i,x,y,ARRcookies=document.cookie.split(";");
    for (i=0;i<ARRcookies.length;i++) {
        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
        x=x.replace(/^\s+|\s+$/g,"");
        if (x==c_name) {
            return unescape(y);
        }
    }
}
/**
*删除cookie
**/
函数deleteCookie(c_名称){
现在=新日期();
document.cookie=c_name+“=;expires=“+now.togmString();
}
/**
*设置一个cookie
**/
函数setCookie(c_名称、值、exdays){
var exdate=新日期();
exdate.setDate(exdate.getDate()+exdays);
var c_value=escape(value)+(exdays==null)?“”:“expires=“+exdate.toutString());
document.cookie=c_name+“=”+c_值;
}
/**
*返回包含未切换内容的cookie值
**/
函数getCookie(c_名称){
变量i,x,y,ARRcookies=document.cookie.split(“;”);

对于(i=0;唯一的方法是通过Get请求将您需要的任何值发送到目标页面。唯一的方法是通过Get请求将您需要的任何值发送到目标页面。一位同事给了我几乎相同的答案,Matt。谢谢。我们启用了ajax缓存。一位同事给了我几乎相同的答案,Matt。谢谢。我们确实有已启用ajax缓存。