2013-12-12 16 views
7

時々私はAJAXに巨大なJSONペイロード(〜20MB)を持たなければならないことがあります。このプロセスでは、ブラウザウィンドウが常に読み込まれているようです(最新のChrome、Windows 8.1)。ユーザーはリンクのようなものをクリックすることができますが、AJAXリクエストが完了するまでブラウザは実際にリンクに移動しません。このようなAJAX呼び出しを必要とするページに移動すると、ナビゲートするのが難しいため、問題になる可能性があります。残念ながら、この時点ではペイロードのサイズを大幅に減らすことはできません(私はグラフを読み込んでいますが、グラフは数十万のノードとエッジです)。uninterruptable ajax request

ブラウザが(ブラウザが応答していても)ナビゲートしない理由は何ですか?可能であれば、潜在的な解決策はありますか?ありがとう!

+1

JSONを分割することを考えましたか?また、BinaryJSのようなものを介してストリーミングし、解決したJSONオブジェクトの要素にアクセスしてダウンロードし続ける「ストリーミングJSON」を可能にする拡張機能の1つを使用することも考えられます。 – 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を送信します。そして、私はslowllyそれらを求めてjsスクリプトを作るだろう。その後、それに参加し、後で完全なデータが正しく送信されたことを確認し、最後にそれを使用します。私は考えることができる

0

2つのだけの事はあなたのAJAX呼び出しが非同期ではないか、そのブラウザで利用可能なすべての並列HTTP接続スレッドを使用している可能性があることを、上記のいずれかの多くのように、すでに述べたということです。 AJAXコールは、ユーザーが行うことを許可している他のやりとりに応じて、画像とスクリプトをバックグラウンドでダウンロードして、どちらかが完了するまで前進することを効果的に防ぐことができます。

20メガバイト私も多分あなたは、可能な場合に何が必要達成するための代替方法を模索すべきである他の人と同意するように、確かに大きな塊です。