我创建了一个使用 AJAX 更新数据的函数。在
xhr.onload
上,this.responseText
不在控制台日志中显示任何值,并且仅执行条件的 else 部分,即使正在发生更新也是如此。我尝试使用 console.log
对其进行调试,但它没有显示任何值。
<button type="button" onclick="upd_general(site_title.value,site_about.value)"class="btn custom-bg text-white">Submit</button>
function upd_general(site_title_val, site_about_val) {
let xhr = new XMLHttpRequest();
xhr.open("POST", "ajax/settings_crud.php", true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function () {
console.log('Response:', this.responseText.trim()); // Debugging line
var myModal = document.getElementById('general-s');
var modal = bootstrap.Modal.getInstance(myModal);
modal.hide();
if (this.responseText.trim() === '1') { // Trim to remove any extra whitespace
js_alert('success', 'Changes Saved!');
get_general();
} else {
js_alert('error', 'No Changes made!');
get_general();
}
};
xhr.send('site_title=' + encodeURIComponent(site_title_val) + '&site_about=' + encodeURIComponent(site_about_val) + '&upd_general');
}
下面是settings_crud.php上的代码
if (isset($_POST['upd_general'])) {
$frm_data = filteration($_POST);
$q = "UPDATE `settings` SET `site_title`=? , `site_about`=? WHERE `sr_no`=?";
$values = [$frm_data['site_title'], $frm_data['site_about'], 1];
$res = update($q, $values, "ssi");
return $res;
}
过滤功能
function filteration($data)
{
foreach ($data as $key => $value) {
$data[$key] = trim($value);
$data[$key] = stripcslashes($value);
$data[$key] = htmlspecialchars($value);
$data[$key] = strip_tags($value);
}
return $data;
}
和更新功能
function update($sql, $values, $datatypes)
{
$con = $GLOBALS['con'];
if ($stmt = mysqli_prepare($con, $sql)) {
mysqli_stmt_bind_param($stmt, $datatypes,...$values);
if (mysqli_stmt_execute($stmt)) {
$res = mysqli_stmt_affected_rows($stmt);
mysqli_stmt_close($stmt);
return $res;
} else {
mysqli_stmt_close($stmt);
die("Query cannot be executed - Update");
}
} else {
die("Query cannot be prepared - Update");
}
}
谢谢大家的回答。 我已经解决了错误。
function upd_general(site_title_val, site_about_val) {
let xhr = new XMLHttpRequest();
xhr.open("POST", "ajax/settings_crud.php", true);
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
try {
console.log('Raw Response:', this.responseText); // Log raw response for debugging
let response = JSON.parse(this.responseText);
console.log('Parsed Response:', response); // Log parsed response for debugging
var myModal = document.getElementById('general-s');
var modal = bootstrap.Modal.getInstance(myModal);
modal.hide();
if (response.status === 'success') {
js_alert('success', 'Changes Saved!');
} else {
js_alert('error', 'No Changes made!');
}
} catch (e) {
console.error('Error parsing response:', e);
js_alert('error', 'An error occurred!');
}
get_general();
};
xhr.send('site_title=' + encodeURIComponent(site_title_val) + '&site_about=' + encodeURIComponent(site_about_val) + '&upd_general');
}
<?php
if (isset($_POST['upd_general'])) {
$frm_data = filteration($_POST);
$q = "UPDATE `settings` SET `site_title`=?, `site_about`=? WHERE `sr_no`=?";
$values = [$frm_data['site_title'], $frm_data['site_about'], 1];
$res = update($q, $values, "ssi");
// Log the update result for debugging
file_put_contents('debug_log.txt', "Update Result: " . ($res ? 'success' : 'error') . "\n", FILE_APPEND);
echo json_encode(['status' => $res ? 'success' : 'error']);
exit();
}
?>