2013-12-12 70 views
7

有時我必須爲AJAX提供巨大的JSON負載(〜20MB)。在這個過程中,似乎瀏覽器窗口不斷加載(最新的Chrome,Windows 8.1)。用戶可以點擊鏈接等東西,但瀏覽器在AJAX請求完成之前不會真正進入這些鏈接。這可能是一個問題,因爲如果您轉到需要這種AJAX調用的頁面,則很難離開。不幸的是,目前我無法減小有效負載的大小(我正在加載圖形,有時圖形有數十萬個節點和邊緣)。不間斷ajax請求

任何想法爲什麼瀏覽器不會離開(即使瀏覽器響應)?如果可能,還有什麼潛在的解決方案?謝謝!

+1

你有沒有想過把你的JSON分成幾塊?您也可以考慮通過類似BinaryJS的流式傳輸並使用允許「流式傳輸JSON」的擴展之一來訪問解析的JSON對象的元素,並繼續下載。 – Brad

+2

你在使用同步ajax嗎?如果是這樣,**停止這樣做**。 – Pointy

+1

考慮: * JSON分塊 *當數據大於X時打開一個單獨的頁面供上傳* *上傳爲更具尺寸效率的格式? – Kroltan

回答

3

我不知道如何解決您面臨的確切技術問題。但是這仍然有用。考慮Google或Facebook,您可以將您的完整個人資料作爲檔案下載到您的所有歷史記錄和照片中。記下他們如何做(不通過AJAX調用)。我相信他們選擇這種方式是因爲你有同樣的問題。只是想想。

3

幾個月前我遇到過類似的問題。我找到了一個使用setTimeout()的解決方案,它在瀏覽器事件隊列中創建一個單獨的事件。這基本上就是我所做的:

jQuery(document).ready(function() { 

    setTimeout(function() { 

    $.ajax({ 
     url: "/longAjaxCall", 
     dataType: "json" 
    }).done(function() { 
     // do whatever ... 
    }); 

    }, 0); 

}); 

不知道您是否正在使用jQuery,但不管其基本原理是相同的。

3

我將首先發送一個MD5 sumchunk number將數據分割成塊。我會製作一個js腳本,慢慢地問他們。然後加入它,稍後檢查完整數據是否正確發送,並最終使用它。

0

我能想到的唯一兩件事就是像上面提到的許多AJAX調用不是異步的,或者您可能已經用完了該瀏覽器可用的所有並行http連接線程。 AJAX調用阻止了一個,因此取決於您允許用戶執行的其他交互,您可能只是在後臺下載圖像和腳本,並有效地阻止用戶前進,直到任何一個完成。

20 MB確實是一大塊,所以我也同意其他人的看法,也許你應該探索一些可能的方法來實現你所需要的東西。