Javascript Ajax PUT请求成功,但未在数据库上更新
我正在执行一个AJAX PUT请求,该请求返回时已成功,但未对数据库进行更新 在转换为JSON之前,请检查以确保进入数组的变量是正确的Javascript Ajax PUT请求成功,但未在数据库上更新,javascript,ajax,Javascript,Ajax,我正在执行一个AJAX PUT请求,该请求返回时已成功,但未对数据库进行更新 在转换为JSON之前,请检查以确保进入数组的变量是正确的 var recycle = { id:document.getElementById('id').value, year:document.getElementById('year').value, materialThousandTonnes:document.getElementById('material').value,
var recycle = {
id:document.getElementById('id').value,
year:document.getElementById('year').value,
materialThousandTonnes:document.getElementById('material').value,
packagingWasteArising:document.getElementById('packaging').value,
totalRecoveredRecycled:document.getElementById('total').value,
achievedRecoveryRecyclingRate:document.getElementById('achieved').value,
euTargetRecoveryRecyclingRate:document.getElementById('target').value
};
$.ajax({
url: '/recycle',
method: 'PUT',
data: JSON.stringify(recycle),
contentType: "application/json;charset=utf-8",
success: function (data) {
alert("hi");
},
error: function (jqXHR, textStatus, errorThrown) {
alert(jqXHR + '\n' + textStatus + '\n' + errorThrown);
}
});
警报“hi”每次都会出现,但实际上它并没有将数据放入我的数据库,请帮助
编辑:
下面是PUT请求的服务器端代码
public function performPut($url, $parameters, $requestBody, $accept)
{
global $dbserver, $dbusername, $dbpassword, $dbdatabase;
$newRecycle = $this->extractRecycleFromJSON($requestBody);
$connection = new mysqli($dbserver, $dbusername, $dbpassword, $dbdatabase);
if (!$connection->connect_error)
{
$sql = "update recycledb set year = ?, materialThousandTonnes = ?, packagingWasteArising = ?, totalRecoveredRecycled = ?, achievedRecoveryRecyclingRate = ?, euTargetRecoveryRecyclingRate = ? where id = ?";
// We pull the fields of the book into local variables since
// the parameters to bind_param are passed by reference.
$statement = $connection->prepare($sql);
$id = $newRecycle->getId();
$year = $newRecycle->getYear();
$materialThousandTonnes = $newRecycle->getMaterialThousandTonnes();
$packagingWasteArising = $newRecycle->getPackagingWasteArising();
$totalRecoveredRecycled = $newRecycle->getTotalRecoveredRecycled();
$achievedRecoveryRecyclingRate = $newRecycle->getAchievedRecoveryRecyclingRate();
$euTargetRecoveryRecyclingRate = $newRecycle->getEuTargetRecoveryRecyclingRate();
$statement->bind_param('iisiiss', $id, $year, $materialThousandTonnes, $packagingWasteArising, $totalRecoveredRecycled, $achievedRecoveryRecyclingRate, $euTargetRecoveryRecyclingRate);
$result = $statement->execute();
if ($result == FALSE)
{
$errorMessage = $statement->error;
}
$statement->close();
$connection->close();
if ($result == TRUE)
{
// We need to return the status as 204 (no content) rather than 200 (OK) since
// we are not returning any data
$this->noContentResponse();
}
else
{
$this->errorResponse($errorMessage);
}
}
}
因此,经过多次努力,我找到了解决问题的办法 在这一行:
$statement->bind_param('iisiiss', $id, $year, $materialThousandTonnes, $packagingWasteArising, $totalRecoveredRecycled, $achievedRecoveryRecyclingRate, $euTargetRecoveryRecyclingRate);
需要将id变量移动到语句末尾
像这样:
$statement->bind_param('iisiiss', $year, $materialThousandTonnes, $packagingWasteArising, $totalRecoveredRecycled, $achievedRecoveryRecyclingRate, $euTargetRecoveryRecyclingRate, $id);
实际的服务器工作正常吗?是的,我可以使用“POST”使用ajax添加数据。问题可能在于服务器端的代码-所以。。。您没有提供足够的信息来获取任何帮助服务器是否实际配置为支持
PUT
请求?如果它确实适用于POST
请求,那么为什么不直接使用POST
请求呢?如果POST有效而PUT无效,那么后端可能会出现问题。打开浏览器“开发工具网络”选项卡…当您深入了解实际请求的详细信息时,将确切看到发送的内容欢迎使用SO!大多数答案都包含一些非代码的解释,说明了它是如何工作的,并描述了它解决问题的优点。您提供的代码已经发布到同一个问题中。答案应添加问题或其答案中其他地方尚未给出的信息-
$statement->bind_param('iisiiss', $year, $materialThousandTonnes, $packagingWasteArising, $totalRecoveredRecycled, $achievedRecoveryRecyclingRate, $euTargetRecoveryRecyclingRate, $id);