わかりやすいように、カレンダーを表示するホテル管理アプリケーション用の PHP スクリプトを用意しました (テーブルの列: 月の日付 / 行: 1 日あたりの料金)。
編集モードでこのスクリプトにアクセスすると、各 内に小さな要素が作成されます。
フィールドの値を変更すると、ajaxcall がバックグラウンド ジョブを実行し、更新された値をフィールドに返します (データベースで新しい値が更新されたことを確認するため)。
値をゆっくりと (フィールドごとに 1 秒以上) 変更すると、完全に機能します。しかし、速度を上げようとすると (値の編集、次のフィールドへの TAB、値の変更など)、ajaxcall はデータベースを更新しますが、フィールドの更新に失敗します。
なぜこれが起こっているのかについてのアイデアはありますか? そして、それを修正する方法は?すべてのブラウザで試しました。
HTML 部分:
<td>
<input type='text' id='$counter' onChange='updateAvailability(this,$idroomclass,\"$date\",$counter)'
value='$total' />
</td>
Javascript:
function ajaxRequest() {
try {
var request = new XMLHttpRequest()
} catch (e1) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP")
} catch (e2) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP")
} catch (e3) {
request = false
}
}
}
return request
}
function updateAvailability(vagos, idroomclass, date, input_id) {
if (vagos.value != "") {
params = "vagos=" + vagos.value + "&idroomclass=" + idroomclass + "&date=" + date
request = new ajaxRequest()
request.open("POST", "ajaxcalls/updateAvailability.php", true)
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
request.setRequestHeader("Content-length", params.length)
request.setRequestHeader("Connection", "close")
request.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
document.getElementById(input_id).value = request.responseText;
} else alert("Ajax error: " + this.statusText)
}
}
request.send(params)
}
}