我正在尝试传递自定义响应标头以通知我的javascript用户已超时。当它与jquery u.i对话框一起使用时,它的效果很好。
我有这个
$.ajaxSetup
({
complete: function (event, xhr, options)
{
if (event.getResponseHeader('X-LOGON') === 'LogOn')
{
window.location.href = "redirect to signin";
}
}
});
所以这应该在每次jquery ajax请求之后运行。
现在我的对话框中有这样的东西
$.manageAjax.add('NonCachedAjaxRequests',
{
type: "GET",
url: 'ajaxRequestPath',
success: function (result)
{
$('#Dialog').html(result).dialog(
{
width: 580,
height: 410,
resizable: false,
modal: true,
buttons:
{
Cancel: function ()
{
$(this).dialog('close');
},
'Create': function ()
{
// create;
}
},
close: function ()
{
//destroy
}
});
}
});
return false;
});
我正在使用一种名为ajax manager http://www.protofunc.com/scripts/jquery/ajaxManager/的东西,这只是帮助停止双击和类似的东西,并使用$ .ajax将使用的所有相同方法。
所以现在当我看到回来填充上面的对话框的请求时,我在firebug中看到了这个
Response Headersview source
Server ASP.NET Development Server/10.0.0.0
Date Fri, 02 Jul 2010 22:12:36 GMT
X-AspNet-Version 4.0.30319
X-AspNetMvc-Version 2.0
X-LOGON LogOn
Cache-Control private
Content-Type text/html; charset=utf-8
Content-Length 6468
Connection Close
注意它是如何说“X-LOGON”但是当涉及到我的ajaxSetup并且到达
if (event.getResponseHeader('X-LOGON') === 'LogOn')
它总是说它是空的但是你可以清楚地看到firebug说的不是。我不明白最新情况。
修改
好吧,这似乎是ajax经理的问题。我真的想继续使用它或类似的东西,因为它确实有助于停止重复请求。
我发现它不喜欢全局ajaxSetups我不知道它为什么不喜欢它们。我开始尝试使用状态代码,所以我一直在玩“403”并找到了这个。
如果一个ajax请求403出来并且你使用带有完整和ajaxmanager的ajaxSetup它仍然会尝试进入成功消息之一。
如果你在成功之前完成一个ajax(如果完成后成功则不起作用)并且它返回403然后ajax管理器没有问题就可以对它进行操作并点击完成。
所以我不知道该怎么做。我想使用ajaxmanager或类似的东西,我想使用ajaxSetup。
所以我不知道我现在是否能同时拥有这两者。
修改2
当我使用状态代码和ajaxSetup与ajax管理器时,我收到此错误
错误:状态:403 |网址: / MyURL http://localhost:3086/Plugins/AjaxManager/Source/jquery.ajaxmanager.js 第44行
error: function(ahr, status){
36 var opts = this;
37 if(status && status.indexOf('error') != -1){
38 setTimeout(function(){
39 var errStr = status +': ';
40 if(ahr.status){
41 errStr += 'status: '+ ahr.status +' | ';
42 }
43 errStr += 'URL: '+ opts.url;
44 throw new Error(errStr);
45 }, 1);
46 }
47 },
所以我不知道这是否是我收到错误的另一个原因。
编辑4
好像我一直在使用一个显然不兼容版本1.4的版本(不确定它为何起作用)
无论如何我现在使用3.0它仍然不起作用,但它有一些我想尝试的新选项,但不知道如何使用它们。
http://www.protofunc.com/scripts/jquery/ajaxManager3/
如果你看一下事件/回调它会有一些全局完整的,所以也许这可能是我需要的。不知道如何运行它。
答案 0 :(得分:1)
manageAjax的源代码可在此处获得: http://www.protofunc.com/scripts/jquery/ajaxManager/jquery.ajaxmanager.js
全局jquery'完整'功能通过以下行发送:
if (opts.global) {
$.event.trigger("ajaxComplete", args);
}
这会动态创建一个新的Event对象,因此它会删除您在原始事件中可用的任何数据。
我可能错了,但在快速阅读代码之后,在manageAjax中早期丢失了标题,我不确定在使用此库时你可以做你想做的事情,直到库被修补以允许它为止。
所以罗伯托的评论似乎是一个很好的建议:没有manageAjax尝试它,它很可能会工作
我希望这会对你有所帮助,
Jerome Wagner