找出了蠻力的方式。
每次回波時間()從服務器端,該束傳遞給onprogress處理程序作爲e.target.responseText。請注意,responseText的繼續與每個響應成長,所以你需要一個客戶端的變量,以保持其先前長度的軌道:
var this_str, last_len = 0;
...
onprogress: function (e) {
this_str = e.target.responseText.substr(last_len);
...do something with this_str...
last_len = e.target.responseText.length;
}
...
如果結果是JSON,你需要解碼this_str(不responseText的)。這對於不同的技術來說效果最好,因爲根據服務器更新的頻率,分析可能會超載。由於您發送的是json對象,整個responseText字符串是一系列json對象,由大括號和大括號開頭「} {」分隔。因此,打破它分成幾部分,並使用最新的:
var subtext, parts, json;
...
onprogress: function (e) {
parts = e.target.responseText.split('}{');
if (parts.length > 1) {
subtext = '{' + parts[parts.length - 1];
} else {
subtext = parts[0];
}
json = JSON.parse(subtext);
...
成功函數使用了JSON了類似的方法:
success: function (text) {
parts = text.split('}{');
if (parts.length > 1) {
subtext = '{' + parts[parts.length - 1];
} else {
subtext = parts[0];
}
json = JSON.parse(subtext);
...
注意,會有一對夫婦未有用onprogress事件東西開始;一定要測試這些,並忽略它們。
當您的服務器端函數終止或exit()s時,您的成功函數和onprogress函數都將收到完整的responseText字符串。如果你想成功做一些不同的事情,記得跟蹤responseText中的最後一個字符串。