2012-06-05 120 views
1

我有一個ajax請求,當單擊鏈接下載文件時會觸發。調用一個服務器端頁面,用訪問者下載的客戶ID和文件名更新數據庫。使用Jquery 1.5.1。這裏的鏈接HTML:Ajax請求無法在Safari,Chrome中運行

<a href="/downloads/whatever.zip" class="software">click here to download</a> 

Ajax請求被寫成如下,幷包含一個函數來通知,如果有在Ajax請求的錯誤:

$(document).ready(function() { 
    //function to alert an error message if request is unsuccessful 
    function ajaxError(request, type, errorThrown) 
    { 
    var message = "There was an error with the AJAX request.\n"; 
    switch (type) { 
     case 'timeout': 
      message += "The request timed out."; 
      break; 
     case 'notmodified': 
      message += "The request was not modified but was not retrieved from the cache."; 
      break; 
     case 'parseerror': 
      message += "XML/Json format is bad."; 
      break; 
     default: 
      message += "HTTP Error (" + request.status + " " + request.statusText + ")."; 
    } 
    message += "\n"; 
    alert(message); 
    } 


$('a.software').click(function() { 
//get the path of the link, and just the file name to be stored in the database 
var filePath = $(this).attr("href"); 
var partsArray = filePath.split('/'); 
var theFileName = partsArray[partsArray.length-1]; 


    $.ajax({ 
    type: "POST", 
    url: "/validate/softwareDownloadedCustomer.asp?custID=<%=custID%>&fileName=" + theFileName, 
    success: function(msg) { 
     alert("Success"); 
    }, 
    error: ajaxError 
    }); 
    }); 
}); 

服務器端代碼沒有問題,只要通過另一個頁面調用而不是ajax請求,它就可以按預期工作。奇怪的是,AJAX請求適用於Firefox和IE,但不適用於Chrome和Safari。在IE中,「成功」消息被警告並且數據庫被更新。在Firefox,Chrome和Safari瀏覽器,這是我的警覺錯誤信息如下:

There was an error with the AJAX request. 
HTTP Error (0 error) 

即使在Firefox收到錯誤消息,它更新數據庫。在Chrome和Safari中,收到錯誤消息並且沒有更新。

,我用我的Ajax調用以下設置嘗試,它似乎並沒有做任何瀏覽器的區別:

contentType: "application/json; charset=utf-8", 
dataType: "json", 'data' 

我缺少什麼來得到這個工作在Safari和Chrome?

+1

如果你在'ajaxError'中放置一個斷點並且使用控制檯進行調試,'type'和'exceptionThrown'的值是什麼?另外,softwareDownloadedCustomer.asp返回什麼(HTML,JSON等)? – HackedByChinese

+0

謝謝,我無法獲得使用螢火蟲控制檯拋出的類型和異常值。當使用alert時,'type'的值是'error',我爲'errorThrown'得到一個空白值。對不起,如此模糊,我沒有經驗使用螢火蟲進行調試並獲取錯誤參數的值。 'request.status'的值是'HTTP錯誤',request.statusText是'0錯誤'。 – deeholzman

+0

有關響應:softwareDownloadedCustomer.asp返回簡單文本「數據已添加到服務器。「我已經嘗試插入響應到含有Ajax請求如下頁面: VAR響應= XMLHttpRequest.responseText; $(」#serverResponse「)的innerHTML =響應; 但因爲我得到的錯誤消息在#serverResponse中沒有任何顯示,但是在firefox和IE中,數據在數據庫中發佈(我寫入了在單獨頁面上插入數據的記錄內容),但數據不會在數據庫中使用chrome或safari發佈。 – deeholzman

回答

3

我居然發現是什麼原因造成的問題 - 這是由於Ajax請求中斷通過鏈接被激活來下載文件。 ajax請求是通過點擊鏈接觸發的。錯誤消息的請求狀態爲0,表示鏈接操作明顯中斷了ajax請求。由於某種原因,顯然在IE中,請求並未被中斷,但它出現在firefox,safari和chrome中,因此是錯誤消息。我在這裏找到相關信息:link

我知道這是在測試ajax請求觸發簡單的按鈕單擊而不是鏈接後的情況。它通過簡單的按鈕點擊觸發,在所有瀏覽器中都能成功運行,並且沒有錯誤消息。

解決方法是使用AJAX,而不是使用AJAX,將用戶發送到記錄點擊的服務器端頁面,然後重定向到相應的下載鏈接。

+0

很高興你明白了,有時你必須把它分解下來才能得到這些類型的問題 –

+1

你實際上可以使用'setTimeout(function(){$ .ajax(..);},0); '內部點擊功能來完成這項工作 – gondo

1

您的Ajax請求使用POST但不發佈任何數據。您傳遞的數據是通過您的URL請求參數。

嘗試要麼改變你的AJAX類型要獲得

type: "GET",  
url: "/validate/softwareDownloadedCustomer.asp?custID=<%=custID%>&fileName=" + theFileName, 

或通過郵寄的數據通過你的參數

var dataToPost = 'custID=<%=custID%>&fileName=' + theFileName; 

type: "POST",  
url: "/validate/softwareDownloadedCustomer.asp", 
data : dataToPost, 
+0

謝謝 - 我試圖保持URL中的查詢字符串數據,並使用ajax type =「Get」,但它不起作用。然後我試着保留「POST」,並通過「data:dataToPost」傳遞參數,而不是查詢字符串並在softwareDownloadCustomer.asp文件(使用json2庫)中成功讀取。 在IE和Firefox中,數據已成功發佈並插入到數據庫中,但在Chrome和Safari中再次收到錯誤,但沒有發佈數據。有趣的是,儘管我在Firefox中收到了相同的錯誤消息,但數據實際上已經發布並存儲在數據庫中。 – deeholzman

+0

,並做到了這一點? –

+0

剛剛編輯我的文章 - 你會看到我得到了與以前基本相同的結果,IE中的成功消息,Firefox中的錯誤消息與成功的帖子和錯誤消息,並沒有發佈在Chrome和Safari – deeholzman