我有一个网站,学生可以在其中进行在线测验。每次他们选择一个答案(用于多项选择的单选按钮)时,都会执行以下代码:
$('input:radio').click(function(){
var questionId = $(this).parent().parent().find('.qid').val();
var answer = $(this).val();
$.ajax({
type: "POST",
url: "insertqanswerajax.php",
data: {questionId: questionId, answer: answer},
});
});
insertqanswerajax.php 代码:
<?php session_start();
include_once('../includes/connect.php'); //connect to database
include_once('../functions/quizfunctions.php'); //all functions
$userSubject = $_SESSION['subject'];
$userGradeLevel = $_SESSION['gradeLevel'];
$userId = $_SESSION['userId'];
$questionId = $_POST['questionId'];
$answer = $_POST['answer'];
insertQuizAnswer($questionId, $userId, $answer, 1);
$DB = null;
?>
和 insertQuizAnwer 函数:
function insertQuizAnswer($questionId, $userId, $answer, $testId){
global $DB;
$standardsHandle = $DB->prepare("INSERT INTO quizanswers (questionid, userid, answer, testid)
VALUES (:questionId, :userId, :answer, :testId)
"); //get all benchmark grades for user
$standardsHandle->bindParam(':questionId', $questionId);
$standardsHandle->bindParam(':userId', $userId);
$standardsHandle->bindParam(':answer', $answer);
$standardsHandle->bindParam(':testId', $testId);
$standardsHandle->execute();
$standardsHandle = null;
}
代码工作正常,直到数量变大(几百个用户进行测试)。服务器崩溃,您会收到默认的 500 错误,网站会在一两分钟后恢复。您只需反复单击一个单选按钮即可复制该错误。
我的内存限制是 524 MB,可能高于我的计划实际允许的值。
这部分代码存在的原因是为了保存用户的答案,这样他们就可以稍后再回来,或者在学校网络掉线(确实如此)的情况下从上次中断的地方继续。
我使用的是共享托管计划,我知道它有其局限性,我正在尝试确定是否有办法实现此目的,或者我的共享计划是否根本无法实现此目的。
最佳答案
这是您的托管问题。 要解决此问题,您必须购买具有更大带宽的托管计划(以同时处理多个请求)。您可以与您的托管提供商讨论此问题。
关于php - Ajax请求导致服务器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20018451/