2010-07-30 74 views
4

我有一個將大量數據上傳到服務器的XHR。這個XHR間歇性地死亡,貌似沒有模式。目前我的代碼如下所示:使用XHR通過POST發送大量數據

function makeFormData(data) { 
    var formdata = ""; 
    for (var key in data) { 
     formdata = formdata + "&" + key + "=" + encodeURIComponent(data[key]); 
    } 
    return formdata.slice(1); 
} 

function xhr(url, data, onsuccess, onerror) { 
    var xhrequest = new XMLHttpRequest(); 

    xhrequest.onreadystatechange = function() { 
     if (xhrequest.readyState != 4) 
      return; 

     if (xhrequest.responseText) 
      onsuccess(xhrequest.responseText); 
    } 

    xhrequest.onerror = function (error_param) { 
     onerror(error_param); 
    } 

    xhrequest.open('POST', url, true); 
    xhrequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    xhrequest.send(makeFormData(data)); 
} 

這是Chrome擴展。我究竟做錯了什麼?我怎樣才能使表單多部分,而不是上傳更小?我已經使用Wireshark來跟蹤請求,並且它通過很多數據包重傳來切斷中間發送(並且從不完成)。

請幫助我,這讓我瘋狂。

+0

你是什麼意思「死」,什麼是服務器響應代碼? – Incognito 2010-07-30 18:23:11

+0

什麼都沒有,上傳只是切斷,客戶端不斷重發ACK。沒有服務器響應。 – 2010-07-30 18:31:37

回答

2

檢查服務器指令。也許max_execution_time和upload size的值很小。如果js不執行請求,請嘗試調試它。