You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ajax无法获取CKEditor数据问题求助(PHP环境)

问题描述

开发基于Ajax与PHP的功能时,无法从CKEditor获取数据。点击按钮后页面显示空白且出现“2022”字样,相关代码如下:

前端表单代码

<form>     
<textarea id="editor" name="Content" required></textarea> 
</div>
<button type="button" id="btn-answer" class="dislike">Answer</button>
</form>

Ajax.js代码

$("#btn-answer").click(() =>
{
  var message = $("#editor").val(); 

  
    $.ajax({
      type: "post", 
      url: "data/answer.php", 
      data: {  
        'Content':message
       },
       beforeSend:function(){
            $(".loader").show();
       },
      success: function(data){
       $("#msg").html(data);
       $(".loader").hide();
      },
    });
  
   
});

answer.php代码

<?php 

$message = $_POST['Content']; 
$status = 1; 

$query = mysqli_query($con, "INSERT INTO answer(userid, answer,topicid,active)VALUES('$Userid','$message','$topicid','$status')"); sleep(3);
if($query){
    echo "<div class='alert alert-dismissible fade show alert-info' role='alert'>You have the questions successfully !</div>";
}else{
    echo "<div class='alert alert-dismissible fade show alert-danger' role='alert'>Something Went Wrong Please Try Again !</div>";   
}

?>

解决方案

1. 修正CKEditor内容获取方式

CKEditor会替换原生textarea,无法通过$("#editor").val()获取编辑内容,必须使用官方API:

  • 对于CKEditor 4:
var message = CKEDITOR.instances.editor.getData();
  • 对于CKEditor 5(以ClassicEditor为例):
var message = ClassicEditor.instances.editor.getData();

确保实例IDeditor与textarea的ID一致。

2. 修复JS语法错误

原Ajax代码中click(() =存在语法错误,需改为click(() =>,否则JS代码无法执行。

3. 排查PHP代码问题

  • 确认$con已正确初始化数据库连接,未连接会导致SQL执行失败
  • 检查$Userid和$topicid是否已定义并赋值,未定义会引发SQL语法错误
  • 替换存在注入风险的拼接SQL,改用预处理语句:
<?php
// 确保$con、$Userid、$topicid已正确定义
$message = $_POST['Content']; 
$status = 1; 

$stmt = $con->prepare("INSERT INTO answer(userid, answer, topicid, active) VALUES (?, ?, ?, ?)");
$stmt->bind_param("sssi", $Userid, $message, $topicid, $status);
$stmt->execute();

if($stmt->affected_rows > 0){
    echo "<div class='alert alert-dismissible fade show alert-info' role='alert'>回答提交成功!</div>";
}else{
    echo "<div class='alert alert-dismissible fade show alert-danger' role='alert'>提交失败,请重试!</div>";
}
$stmt->close();
?>

4. 添加Ajax调试机制

在Ajax配置中加入error回调,捕获请求异常并输出:

$.ajax({
  type: "post", 
  url: "data/answer.php", 
  data: {'Content': message},
  beforeSend:function(){
       $(".loader").show();
  },
  success: function(data){
    $("#msg").html(data);
    $(".loader").hide();
  },
  error: function(xhr, status, error){
    console.log(xhr.responseText); // 在控制台查看错误详情
    $("#msg").html("请求出错:" + error);
    $(".loader").hide();
  }
});

同时打开浏览器开发者工具(F12)的Network面板,查看请求状态和返回内容,定位空白和“2022”字样的来源。


内容的提问来源于stack exchange,提问作者Yahaya Ibrahim Yacksweb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:20:29