小弟用javascript設定迴圈10萬,每跑一圈執行一次ajax,然後迴傳圈數到網頁上,但每次都跑不到1萬筆就會停下來,是為什麼呢?以下附上程式碼
js
$("#submit_btn").click(function(){
var frequency = 50000;
for(i = 0; i<frequency; i++){
$.ajax({
url:'ajax.php?action=encryption',
type:'GET',
dataType:'JSON',
success:function(data){
$("#aid").prepend(data.count+"<br>");
},function(error){
$("#aid").append("error<br>");
}
})
}
})
html
<input type="button" id="submit_btn" value="開始運算加密"/>
<br/>
<a id="aid"></a>
php
if(isset($_GET['action']) && $_GET['action'] == "encryption"){
$query = "insert register_test (count) values ('1')";
mysqli_query($con,$query) or die ("error");
$query_count = "select * from register_test";
$result_count = mysqli_query($con,$query_count) or die("error2");
$count = mysqli_num_rows($result_count);
$json = array(
'count' => $count,
);
echo json_encode($json);
}
$("#submit_btn").click(function(){ var frequency = 50000; for(i = 0; i<frequency; i++){ $.ajax({ url:'ajax.php?action=encryption', async: false, type:'GET', dataType:'JSON', success:function(data){ $("#aid").prepend(data.count+"<br>"); },function(error){ $("#aid").append("error<br>"); } }) } })
你在做壓力測試喔
雖然外獅佬大大回應了,不過我還是補充一下。
除了設定async: false,稍微用函數加上遞迴就可以把非同步方法改成同步。簡單地說,就是把$.ajax放到一個函數裡面,然後在success的時候呼叫這個函數,另外加一個變數來記錄次數,當次數到達時,結束遞迴(也就是在success的時候不再呼叫這個函數)。