Js/AJAX 中的响应处理

问题描述 投票:0回答:1

我创建了一个使用 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");
 }
}
php json ajax
1个回答
0
投票

谢谢大家的回答。 我已经解决了错误。

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();
}
?>

© www.soinside.com 2019 - 2024. All rights reserved.