我很新编程,所以很抱歉,如果这是一个愚蠢的问题。我想知道如果我做错了什么或者是否有更好的方法来解决我的问题。我使用AJAX将信息提交给php处理程序,然后基本上用更新的信息替换我的页面上的数据,以便页面不必每次都刷新。AJAX和PHP有问题
这是我的AJAX代码。
<script>
$(document).ready(function(){
$("#start<?php echo $rowCount; ?>").click(function(){
$("#displayJobs").load("assemblyStartHandlerCopy.php", {
jobID: <?php echo $jobID; ?>,
roomID: <?php echo $roomID; ?>,
finishColor: '<?php echo $finishColor; ?>',
startTime: '<?php echo $assemblyS; ?>'
});
$("#displayJobsNotStarted").load("assemblyNotStartedCount.php");
});
});
</script>
我的PHP代码是
<?php include "../../../includes/db.php"; ?>
<?php
$startBtnColor = "";
$completeBtnColor = "";
$onQlistStatus = "On Q-List";
?>
<!--IF START BUTTON UPDATE DATA-->
<?php
date_default_timezone_set("America/Denver");
if(isset($_POST['jobID'])) {
$jobID = $_POST['jobID'];
$roomID = $_POST['roomID'];
$finishColor = $_POST['finishColor'];
$startTime = $_POST['startTime'];
$start = date("Y-m-d H:i:s");
if($startTime == NULL || $startTime == 0) {
$startTime = $start;
}
elseif($startTime != NULL || $startTime == 0) {
$startTime = 0;
};
$querySetStart = "UPDATE rooms SET assemblyS = '$startTime' WHERE jobID = $jobID AND finishColor = '$finishColor'";
$resultSetStart = mysqli_query($connect, $querySetStart);
if(!$resultSetStart) {
echo "Start Button Failed " . mysqli_error($connect);
};
?>
<!--GET AND DISPLAY JOBS-->
<table>
<tr>
<th class="rowStart">Start</th>
<th class="rowJobName">Job Name</th>
<th class="rowWoodType">Wood Type</th>
<th class="rowFinishColor">Finish Color</th>
<th class="rowComplete">Complete</th>
</tr>
<?php
$query = "SELECT
jobs.jobID,
jobs.jobName,
rooms.roomID,
rooms.roomName,
rooms.assemblyS,
rooms.assemblyF,
rooms.assemblyNeeded,
rooms.woodType,
rooms.finishType,
rooms.finishColor
FROM jobs
LEFT JOIN rooms
ON jobs.jobID = rooms.jobID
WHERE rooms.assemblyNeeded = 1 AND jobs.status = '$onQlistStatus' AND rooms.assemblyF IS NULL
OR rooms.assemblyNeeded = 1 AND jobs.status = '$onQlistStatus' AND rooms.assemblyF = 0
GROUP BY jobs.jobName, rooms.finishColor
ORDER BY deliveryDate, jobName, finishColor LIMIT 100";
$result = mysqli_query($connect, $query);
$x = 1;
$rowCount = 1;
if ($result) {
while($row = mysqli_fetch_assoc($result)) {
$jobID = $row['jobID'];
$jobName = $row['jobName'];
$woodType = $row['woodType'];
$finishColor = $row['finishColor'];
$roomID = $row['roomID'];
$assemblyS = $row['assemblyS'];
$assemblyF = $row['assemblyF'];
//SET BUTTON BACKGROUND COLOR
if ($assemblyS != NULL) {
$startBtnColor = "green";
};
if ($assemblyS == NULL || $assemblyS == 0) {
$startBtnColor = "white";
};
//ALTERNATE ROW COLOR
$x++;
if ($x%2 == 0) {
$class1 = "backgroundColor1";
}
else {
$class1 = "backgroundColor2";
};
//DISPLAY ROW INFORMATION
$start = "<td class='rowStart'><button id='start$rowCount' style='background-color: $startBtnColor'>Start</button></td>";
?>
<script>
$(document).ready(function(){
$("#start<?php echo $rowCount; ?>").click(function(){
$("#displayJobs").load("assemblyStartHandlerCopy.php", {
jobID: <?php echo $jobID; ?>,
roomID: <?php echo $roomID; ?>,
finishColor: '<?php echo $finishColor; ?>',
startTime: '<?php echo $assemblyS; ?>'
});
$("#displayJobsNotStarted").load("assemblyNotStartedCount.php");
});
});
</script>
<?php
$jobName = "<td class='$class1 rowJobName'>$jobName</td>";
$woodType = "<td class='$class1 rowWoodType'>$woodType</td>";
$finishColorRow = "<td class='$class1 rowFinishColor'>$finishColor</td>";
$complete = "<td class='rowComplete'><button id='complete$rowCount' style='background-color: $completeBtnColor'>Complete</button></td>";
?>
<script>
$(document).ready(function() {
$("#complete<?php echo $rowCount; ?>").click(function() {
$("#displayJobs").load("assemblyCompleteHandlerCopy.php", {
jobID: <?php echo $jobID; ?>,
roomID: <?php echo $roomID; ?>,
finishColor: '<?php echo $finishColor; ?>',
completeTime: '<?php echo $assemblyS; ?>'
}, function(responseTxt, statusTxt, xhr) {
if(statusTxt == "success") {
//DO NOTHING
};
if(statusTxt == "error") {
alert("Error: " + xhr.status + ": " + xhr.statusText);
};
});
$("#displayJobsNotStarted").load("assemblyNotStartedCount.php");
$("#recentlyCompleted").load("assemblyRecentlyCompletedHandler.php", {
complete: 1
}, function(responseTxt, statusTxt, xhr) {
if(statusTxt == "success") {
//DO NOTHING
};
if(statusTxt == "error") {
alert("Error: " + xhr.status + ": " + xhr.statusText);
};
});
});
});
</script>
<?php
echo "<tr>" . $start . $jobName . $woodType . $finishColorRow . $complete . "</tr>";
$rowCount++;
};
};
?>
</table>
<?php
}
?>
我知道这是相当混乱。基本上所有的信息都被拉入表格,并通过一个while循环来回显行。然后,如果我选择与“作业”或“行”相关联的按钮,则第一个标记是开始时间,第二个是更改颜色,第三个是新的计数。 有没有更好的方法来做到这一点或确保我的代码不会触发,除非它是成功的。
对我来说,奇怪的是我的代码被复制到PHP处理程序中。如果我刷新页面,则每次都可以正确显示,而且没有任何问题。
我会建议让他们更加分离,使用AJAX将数据发布到PHP并让PHP返回JSON数据。 – Twisty