ユーザーの入力ボックスを (jQuery を使用して) 動的に作成するページがあります。ユーザーは、作成した各入力ボックスに値を入力できます。保存ボタンをクリックすると、ユーザーが作成したすべての入力ボックスを反復処理する JavaScript 関数が呼び出され、XMLHttpRequest を使用してこれらの値が DB に挿入される process.php ファイルに送信されます。
一度に 1 つの Request のみを送信すると、このコードは正常に機能します。しかし、それをループして、各反復で各ボックスから値を送信すると (ループを使用して複数の要求を送信することを意味します)、最後の要求のみが成功します。最後の呼び出しを除く他のすべての呼び出しは中止されます (firebug を使用して見つかりました)。
なぜこれが起こっているのですか?
私のコード:
<script>
function saveTimeSlots(){
var ajaxRequest;
try{
ajaxRequest = new XMLHttpRequest();
}
catch(e){
alert('Issue with browser.')
}
ajaxRequest.onreadystatechange = function(){
if( ajaxRequest.readyState==4 ){
alert(ajaxRequest.responseText); //This returns empty except for last call
}
}
var timeSlots = document.getElementById('formSlots').childNodes;
var date = $.datepicker.formatDate('dd-mm-yy', new Date($('#datepicker').datepicker("getDate")));
for(j=0; j<timeSlots.length; ++j){
var time = timeSlots[j].getElementsByTagName("input")[0].value;
var status = 1;
var queryString = "?date=" + date + "&time=" + time + "&status=" + status;
ajaxRequest.open("GET", "process.php" + queryString, true);
ajaxRequest.send(null);
}
}
</script>
<input type="button" value="Save time slots" class="custom-button" onclick="saveTimeSlots()"/>
以下はprocess.phpのコードです
<?php
mysql_connect( $dbhost,$user,$pwd );
mysql_select_db( $dbase ) or die( mysql_error() );
$date = mysql_real_escape_string( $_GET['date'] );
$time = mysql_real_escape_string( $_GET['time'] );
$status = mysql_real_escape_string( $_GET['status'] );
$query = "INSERT INTO time_slots (`date`,`time`,`status`) VALUES ('" . $date . "','" . $time . "'," . $status . ")";
echo $query;
if( mysql_query( $query ) ){
echo "Success";
}else{
echo mysql_error();
}
mysql_close();
}
?>
これは Firebug が示すものです:
GET http://localhost/process.php?date=24-06-2012&time=1&status=1 Aborted
GET http://localhost/process.php?date=24-06-2012&time=2&status=1 Aborted
GET http://localhost/process.php?date=24-06-2012&time=3&status=1 200 OK 31ms