2016-09-15 49 views
0

我開發了一個頁面,通過AJAX將帶有圖像的表單張貼到WebAPI2控制器。爲什麼JQuery AJAX間歇性地返回錯誤0?

我反覆這樣做;我讓用戶選擇一堆圖像,添加到選擇框,然後用戶可以從另一個位置添加更多的圖像,或者他們可以從列表中刪除項目。 因此,我將它們填寫的表單提交給服務器。我爲每個圖像專門做一次,以便我可以顯示每個圖像上傳的進度。 一旦圖像在服務器上,它就會被我的服務器端代碼移動到一個安全的存儲庫。應用程序池正在使用特定的AD帳戶來完成它的工作。

這對我來說很好,對於其他已經測試過的其他人來說非常適用,但我有一個單獨的測試人員 - 超過8人,他們在IE中遇到間歇性錯誤。他不會在另一個瀏覽器中嘗試它(我們沒有實際的測試人員,只是我們的用戶,而且這個人很固執)

我的服務器端web api代碼,它是同一個項目的一部分,甚至沒有擊中。我記錄下我們立即進入方法。此外,服務器端的應用程序日誌中沒有記錄錯誤。 AJAX返回「錯誤」和「0」。沒有響應文本。我記錄所有AJAX錯誤到服務器地址(提交就好了,順便說一句)

我最初用MVC控制器而不是Web API寫了這個,但是我希望它能解決這個問題。它沒。

「提交」表單的按鈕不是提交按鈕。它是輸入=「按鈕」。我的表單上沒有提交按鈕。該表單沒有要發佈的地址。我鎖定整個表單,因此無法點擊任何按鈕,在項目上傳時不能編輯任何元素。總之,我看不到e.preventDefault();會有幫助。

這實際上並不是跨站點腳本,而且我也找不到任何聯機內容,這表明跨站腳本策略可能會隨機觸發,但看起來好像它是。

有時,他提交了表格和1/3的圖片上傳和其他錯誤。這不是圖像類型,尺寸或其中的任何一種 - 我複製了他上傳的圖像並用它們進行驗證。

我們在服務器端禁用了跨站點腳本,並且在我身上添加了一個JSONP格式化程序,他測試了它沒有錯誤。我們將繼續測試,看看它是否真的解決了這個問題,因爲他之前已經開始工作,然後問題再次出現。

如果真的是導致它的跨站點腳本,爲什麼?請問IIS服務器上有什麼東西可以選擇不同的頂級域名,因爲我沒有在我的ajax請求中指定一個域名?

$.ajax({ 
    url: getBaseURL() + 'API/FileForm', 
    type: 'POST', 
    data: dataString, 
    cache: false, 
    contentType: false, 
    processData: false 
}) 

凡getBaseURL()說:

function getBaseURL() { 
    var baseURL = $("#HiddenCurrentURL").val().trim(); 
    if (baseURL != "/") { 
     baseURL += "/"; 
    } 
    return baseURL; 
} 

隨着HiddenCurrentURL在我_layout作爲:

@Html.Hidden("HiddenCurrentURL", Request.ApplicationPath) 

任何幫助,將不勝感激。我不確定現在該做什麼。瀏覽器設置可以這樣做嗎?

編輯:他正在使用IE 11 - 正如我和我的其他測試人員。我也有,還有一些其他人也在Chrome和Firefox中測試過。

編輯2:我們禁用了跨站腳本,問題在繼續。我認爲有意思的是,這個問題似乎只發生在深夜或者清晨,在下班時間工作。我檢查了IIS組,並且他們表示它的運行方式爲「始終開啓」,但...

+0

也許和IE版本有關..你可以提供IE版本嗎? – Hackerman

+0

@Hackerman不知道它是否會告訴我我添加了,但版本是IE 11 - 對於所有的測試人員。 – nebulous

回答

0

用戶有一個很糟糕的無線網絡連接,並且正在斷開連接。它會中斷ajax請求 - 那些沒有發送的請求仍然會發送,並且到達服務器的請求將完成,其他請求將失敗。