2012-01-15 29 views
2

我想按照选项#3溶液中,在此SO职位:A controller action which returns a partial view inserts the logon page when authorization failsJQuery AjaxComplete方法剥离自定义标题?

我运行到阅读我的自定义标题在jQuery中的ajaxComplete方法的问题。

我已经提琴手和Chrome的调试工具的自定义标题,其实是被发回,并通过浏览器接收确认...

响应头(在小提琴手):

Server: ASP.NET Development Server/10.0.0.0 
Date: Sun, 15 Jan 2012 04:00:13 GMT 
X-AspNet-Version: 4.0.30319 
X-AspNetMvc-Version: 3.0 
Unauthorized: 1 
Cache-Control: private 
Content-Length: 0 
Connection: Close 

响应头(由铬原样):

Cache-Control:private 
Connection:Close 
Content-Length:0 
Date:Sun, 15 Jan 2012 04:12:13 GMT 
Server:ASP.NET Development Server/10.0.0.0 
Unauthorized:1 
X-AspNet-Version:4.0.30319 
X-AspNetMvc-Version:3.0 

响应头(从调用了XMLHttpRequest变量“getAllResponseHeaders()”找到送入ajaxComp勒特):

Date: Sun, 15 Jan 2012 04:42:21 GMT 
X-AspNet-Version: 4.0.30319 
Connection: Close 
Content-Length: 65 
X-AspNetMvc-Version: 3.0 
Server: ASP.NET Development Server/10.0.0.0 
Content-Type: application/json; charset=utf-8 
Cache-Control: private 

有趣的是,即在原来的AJAX请求的返回称为(由jquery的作为初始化)功能并接收未授权报头。

有没有人知道这里发生了什么,我能做些什么来解决这个问题?

这里是我的 “ajaxComplete” javascript代码

$(document).ajaxComplete(function (event, request, settings) { 
     alert(request.getResponseHeader('Unauthorized')); 
    }); 

回答

0

Vucetica的初步反应让我思考,我花了最后一个小时看jquery的代码。我有我的自定义标题现在回来。它看起来像麻烦源于原始ajax请求的成功回调中我的代码中未处理的异常。

绝对是我应该修复的东西,但似乎很奇怪,jquery会允许它自己以这种方式容易受到干扰,只会影响自定义标题。这种意外的行为最初导致我在错误的方向。

无论如何,谢谢大家的帮助。

为了完整起见,这里是我的代码之前和之后。

之前(在ajaxComplete方法没有收到自定义页眉)

$.ajax({ 
    type: "GET", 
    url: "/Game/GetPlay/27?roundId=" + that.gameState.RoundToDisplay, 
    contentType: "application/json; charset=utf-8", 
    data: {}, 
    dataType: "json", 
    success: function (play, request, settings) { 
     that.play = play; 
     that.startGame(); 
    }, 
    error: null, 
    cache: false 
}); 

(工作)

$.ajax({ 
    type: "GET", 
    url: "/Game/GetPlay/27?roundId=" + that.gameState.RoundToDisplay, 
    contentType: "application/json; charset=utf-8", 
    data: {}, 
    dataType: "json", 
    success: function (play, request, settings) { 
     that.play = play; 
     try { 
      that.startGame(); 
     } catch(err){ 

     } 
    }, 
    error: null, 
    cache: false 
}); 
1

你可以看看here。如果您在页面上使用相同的插件(ajaxmanager),可能会有所帮助。如果没有,请检查您的其他插件。

+0

我没看到,SO事先发布后。我没有使用Ajax Manager。我确实已经加载了其他的JS库,我将检查它们中的任何一个是否使用Ajax管理器,或者正在绑定到ajaxComplete自己,但在这一点上它不是一个可能的IMO。 – omatase 2012-01-15 05:38:01

+0

确认,没有引用ajaxmanager,“ajax manager”,ajaxcomplete或ajaxsuccess,除了我在原始文章和jquery本身提到的代码之外的任何地方。 – omatase 2012-01-15 05:41:29

+0

你知道“Content-Type:application/json; charset = utf-8”是从哪里来的吗?你可以在getAllResponseHeaders中使用它,但不能在chrome检查中使用。另外,你可以发布原始ajax调用的getAllResponseHeaders结果吗? – 2012-01-15 06:15:22