簡體   English   中英

jQuery AjaxComplete方法剝離自定義標題?

[英]JQuery AjaxComplete Method Stripping Out Custom Headers?

我試圖在此SO帖子中遵循解決方案中的選項#3: 當授權失敗時,返回部分視圖的控制器操作將插入登錄頁面

我在讀取jquery的ajaxComplete方法中的自定義標頭時遇到問題。

我已經在提琴手和chrome的調試工具中確認,自定義標頭實際上是由瀏覽器發送回並接收的...

響應標題(在Fiddler中):

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

響應標題(Chrome收到):

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

響應標頭(從傳遞給ajaxComplete的xmlHttpRequest變量上調用“ getAllResponseHeaders()”時發現):

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發起)時調用的函數確實會收到Unauthorized標頭。

有誰知道這是怎么回事,我能做什么來解決這個問題?

這是我的“ ajaxComplete” JavaScript代碼

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

你可以在這里看看。 如果您在頁面上使用相同的插件(ajaxmanager),則可能會有所幫助。 如果沒有,請檢查您的其他插件。

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
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM