Jquery ajaxcomplete没有得到自定义响应头?

时间:2010-07-02 22:18:07

标签: c# javascript jquery asp.net-mvc

我正在尝试传递自定义响应标头以通知我的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/

如果你看一下事件/回调它会有一些全局完整的,所以也许这可能是我需要的。不知道如何运行它。

1 个答案:

答案 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