問題
jQuery を使用して (比較的) 大量のデータを Web システムに投稿し、Ubuntu から CentOS に移行しています (面倒なプロセスです)。問題は、受信されるデータが切り捨てられることです。サーバーからクライアントに同じデータを送信しても、切り捨ては発生しません。
「送信」されるデータの量 (つまり、Javascript のデバッグ中に表示されるデータ) は 116,902 バイト (正しいデータ量) であるのに対し、受信されるデータの量は約115,668 バイトです。この数値は変動するようです。問題は時間に関連している可能性があると私に信じさせます。トランザクションは約 3.1 秒で完了 (受信、応答) しますが、それほど時間はかかりません。調べる必要のある設定はありますか?
その考えはさておき、私の PHP インストールは、8M の投稿データを受け入れ、128M の物理メモリを使用するように構成されていますが、これで十分なようです。
jQueryコードは以下です。これは問題ではないと確信していますが、要求どおりに含めました。
受信:
function synchronise_down()
{
$.ajax({url: "scripts/get_data.php",
context: document.body,
dataType: "json",
type: "POST",
success: function(result)
{
// Fix the state up.
update_data(result);
// Execute on syncronise.
execute_on_synchronise();
},
error: function(what, huh)
{
IS_WAITING = false;
}
});
}
送信:
function synchronise_up()
{
var serialised = MIRM_MODEL.serialise();
LAST_SERIALISED = new Date().getTime();
$.ajax({url: "scripts/save_model.php",
context: document.body,
dataType: "json",
data: {"model":serialised},
type: "POST",
success: function(result)
{
// Fix the state up.
update_data(result, true);
// Execute on syncronise.
execute_on_synchronise();
},
error: function(what, huh)
{
IS_WAITING = false;
}
});
}
回避策 (これを解決策とは呼びません)
編集:これを「修正」しましたが、必ずしも問題の内容と解決方法を見つけたわけではありません。これは興味深い問題なので、回避策を説明し、質問を開いたままにします。
私がやっていることは、大きなデータのシリアル化を jquery に処理させるのではなく、最初に自分で行い、本質的に 2 回シリアル化しています。このコードは次のとおりです。
function synchronise_up()
{
var serialised = JSON.stringify(MIRM_MODEL.serialise());
LAST_SERIALISED = new Date().getTime();
$.ajax({url: "scripts/save_model.php",
context: document.body,
dataType: "json",
data: {"model":serialised},
type: "POST",
success: function(result)
{
// Fix the state up.
update_data(result, true);
// Execute on syncronise.
execute_on_synchronise();
},
error: function(what, huh)
{
IS_WAITING = false;
}
});
}
もちろん、重要な行は次のとおりです。
var serialised = JSON.stringify(MIRM_MODEL.serialise());
サーバーに到達したら、このデータをデコードする必要があります。これは、2 回シリアル化されているためです。この「ソリューション」には追加のコストがかかります: より多くのデータを送信し、より多くの作業を行います。問題はまだ残っています: 何が問題で、本当の解決策は何ですか?