问题描述
我有一个任务应用程序,其中管理员有权在主页上编辑任务。更新是在新打开的页面上完成的,然后显示结果“数据已保存”,重定向到主页,并且必须将消息“已编辑”传达给重定向页面上的任务。也许有人可以给我一些有关如何将消息从Ajax传输到重定向页面的建议?
JS:
edit_form.addEventListener('submit',async(event)=>{
event.preventDefault();
try {
const response = await fetch(`/tasks/save/${id}`,{//обработчик action
method: 'POST',body: new FormData(edit_form)
});
let answer = await response.text();
console.log("ответ сервера " + answer);
if (answer === true){
result.innerHTML = TASK_SAVED;
}else{
result.innerHTML = TASK_UNSAVED ;
setTimeout("window.location.replace('/')",2000);
}
}catch (error) {
console.log("ошибка",error);
}
});
PHP:
public function saveAction($id){
$saved_data=$this->request->post();
$saved =$this->mainservice->saveTask($saved_data,$id);
header('Content-Type: text/plain');
if ($saved ==="1"){
echo "Task saved";
}if ($saved ==="0")
echo "task isn't saved";
}
public function saveTask($saved_data,$id){
$sql = "UPDATE tasks SET name = :name,email = :email,textarea = :textarea,status= :status where id = :id";
$params =[
'name' => trim($saved_data['name']),'email'=> trim( $saved_data['email']),'textarea'=> trim($saved_data['textarea']),'status' => trim($saved_data['status'][0]),'id'=>$id
];
$dbConnection = $this->dbConnection->getConnection();
return $this->dbConnection->executesql($sql,$params);
解决方法
您可以使用会话来转移消息,然后通过js函数将其称为flash
将您的编辑结果保存在$ _SESSION ['msg']和$ _SESSION ['class']中,以通过引导程序控制味精颜色
在您的php代码中
function flash() {
$message = $_SESSION['msg'];
$class = $_SESSION['class'];
if(!empty($message)){
echo '<div class="bg-'.$class.' msg-flash alert alert-warning alert-dismissible fade show" role="alert"
style="transition: all .9s ease; width:100%;" >'.$message.'<button type="button" class="close white "
data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button></div>';
}
// empty $message after show
$message = "";
}
在您的JavaScript代码中
function flash() {
// collect result from php session msg by http request
}
在您的javascript文件中的每个函数以及dom加载后,运行函数都会闪烁