Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax PUT请求成功,但未在数据库上更新_Javascript_Ajax - Fatal编程技术网

Javascript Ajax PUT请求成功,但未在数据库上更新

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,

我正在执行一个AJAX PUT请求,该请求返回时已成功,但未对数据库进行更新

在转换为JSON之前,请检查以确保进入数组的变量是正确的

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);