为什么我的程序没有进入我的 switch case "deleteRegistro" 发送和获取 PHP 中的 $_POST?
Why doesn't my program enters in my switch case "deleteRegistro" sending and getting with $_POST in PHP?
我的问题:我不知道为什么,我的 switch
外壳不能正常工作,我不知道为什么我的 AJAX status == 'succcess'
.
我的 onClick 函数在我的按钮中:
$data->acción = "<div class='text-center'><div class='btn-group'><button id='modificar_$data->id' class='btn btn-primary btn-sm btnEditar' value='edit'><i class='material-icons'>edit</i></button><button onclick='Delete($data->id, $tableName, $field)' class='btn btn-danger btn-sm btnBorrar'><i class='material-icons' value='delete'>delete</i></button></div></div>";
我的函数:
function Delete(id, tableName, field){
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
action: "deleteRegistro",
id: id,
tableName: tableName,
field: field
}, function (data, status){
if (status === 'error') {
console.log("Not deleted");
}
else if (status === 'success') {
console.log("Deleted successfully");
}
});
}
}
我的开关盒:
switch($_POST['action']){
case 'deleteRegistro':
$id = $_POST['id'];
$tableName = $_POST['tableName'];
$field = $_POST['field'];
echo "Hello!";
?>
<script>alert("Hello!");</script>
<?php
break;
}
如你所见,我的 AJAX status == 'succcess'
:
这是我的完整代码,如果你需要检查的话:
<?php
use GuzzleHttp\json_decode;
include_once(DIR_PLUGINS.'/alexcrudgenerator/main.php');
$test = new GenerateCrud($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
if ($_GET['action']){
print_a($_GET['action']);
}
switch($_POST['action']){
case 'datosTabla': // OK.
//print_r($_POST['action']);
$res = json_decode($_POST['datos']);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
break;
case 'deleteRegistro':
$id = $_POST['id']; // Quiero obtener estas variables que he enviado desde la función Delete();
$tableName = $_POST['tableName']; // Quiero obtener estas variables que he enviado desde la función Delete();
$field = $_POST['field']; // Quiero obtener estas variables que he enviado desde la función Delete();
echo "Hello!";
?>
<script>alert("Hello!");</script>
<?php
break;
case 'showtable': // OK.
$res = getEntireTable($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
$tableName = $_POST['tableName'];
$tableName = json_encode($tableName);
$field = json_decode($_POST['tableFields'],1)[0];
//print_r($tableName);
//print_r('<br>');
//print_r($campo);
foreach ($res as $data){
$data->acción = "<div class='text-center'><div class='btn-group'><button id='modificar_$data->id' class='btn btn-primary btn-sm btnEditar' value='edit'><i class='material-icons'>edit</i></button><button onclick='Delete($data->id, $tableName, $field)' class='btn btn-danger btn-sm btnBorrar'><i class='material-icons' value='delete'>delete</i></button></div></div>";
$resultados['data'][] = $data;
}
$resultados = json_encode($resultados); // 7 PROPIEDADES
foreach(json_decode($_POST['tableFields']) as $columnsDB){
$fields[] = array('data'=>$columnsDB);
}
$fields[]['data'] = 'acción';
$fields = json_encode($fields);
?>
<head>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<div class="container caja">
<div class="row">
<div class="col-lg-12 col-sm-12">
<div>
<table id="tablaUsuarios" class="table table-striped table-bordered table-condensed hover" style="width:100%" >
<thead class="text-center">
<tr>
<?php
foreach (json_decode($_POST['tableFields']) as $columnsTH){
echo '<th>' . strtoupper($columnsTH) . '</th>';
}
echo '<th>ACCIÓN</th>';
?>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script>
function Delete(id, tableName, field){
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
action: "deleteRegistro",
id: id,
tableName: tableName,
field: field
}, function (data, status){
if (status === 'error') {
console.log("Not deleted");
}
else if (status === 'success') {
console.log("Deleted successfully");
}
});
}
}
$(document).ready(function() {
var datos= <?=$resultados?>;
var dynamicColumns = <?=$fields?>;
datos = JSON.stringify(datos);
$('#tablaUsuarios').DataTable({
"language": {"url": "https://cdn.datatables.net/plug-ins/1.10.25/i18n/Spanish.json"},
"paging": true,
"lengthChange": true,
"searching": true,
"info": true,
"autoWidth": true,
"scrollX": true,
"ajax":{
"url": '<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/',
"method": 'POST',
"data":{action: "datosTabla", datos: datos}
},
"columns": dynamicColumns
});
})
</script>
<?php
break;
}
?>
有人可以帮帮我吗?实在看不懂。
如果status == 'success'
,则表示POST请求已发送成功,所以我应该进入我的case switch
并打印一个“Hello!”。
我做错了什么?
你没有在问题中提到 switch
案例在哪里,我假设它在 <?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/"
index.php 文件中好吗?
所以您正在使用 Ajax 将数据 post 发送到 php 文件,并且 Ajax 成功地 post 发送了数据,但是您怎么会可以期望 hello
显示在屏幕上吗?
正如我在之前的回答中提到的,php 文件中存在 switch case 的输出将不会显示,$.post
方法只是将数据 posts 到文件它不会重定向到文件。
根据您的需要,我建议您使用隐藏表单将数据 post 写入文件。
修改后的删除函数为..
function Delete(id, tableName, field){
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
document.getElementById("postid").value = id;
document.getElementById("postTablename").value = tableName;
document.getElementById("postfield").value = field;
document.forms['deleteform'].submit();
//Commenting old function
/*$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
action: "deleteRegistro",
id: id,
tableName: tableName,
field: field
}, function (data, status){
if (status === 'error') {
console.log("Not deleted");
}
else if (status === 'success') {
console.log("Deleted successfully");
}
});*/
}
}
现在在 html 代码中添加一个表单 deleteform
注意:- 在将此脚本用于函数 Delete()
之前添加
<form name="deleteform" action="<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/" method="post">
<input type="hidden" id="postid" name="id" value="">
<input type="hidden" id="postTablename" name="Tablename" value="">
<input type="hidden" id="postfield" name="field" value="">
</form>
提交此表单后,您将进入给定 URL 中的 php 文件,在这里您可以使用从 post 获得的数据做任何您想做的事情方法。
如果您不想重定向到 php 包含 switch case 的文件,则只显示 data
您从该页面获得的文件。
function Delete(id, tableName, field){
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
action: "deleteRegistro",
id: id,
tableName: tableName,
field: field
}, function (data, status){
if (status === 'error') {
console.log("Not deleted");
}
else if (status === 'success') {
console.log("Deleted successfully" + "This is the response:- " + data);
}
});
}
}
现在您可以在控制台中看到文件的响应,在您的情况下,它应该向您显示 hello
,因为您没有回显任何其他内容。
我的问题:我不知道为什么,我的 switch
外壳不能正常工作,我不知道为什么我的 AJAX status == 'succcess'
.
我的 onClick 函数在我的按钮中:
$data->acción = "<div class='text-center'><div class='btn-group'><button id='modificar_$data->id' class='btn btn-primary btn-sm btnEditar' value='edit'><i class='material-icons'>edit</i></button><button onclick='Delete($data->id, $tableName, $field)' class='btn btn-danger btn-sm btnBorrar'><i class='material-icons' value='delete'>delete</i></button></div></div>";
我的函数:
function Delete(id, tableName, field){
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
action: "deleteRegistro",
id: id,
tableName: tableName,
field: field
}, function (data, status){
if (status === 'error') {
console.log("Not deleted");
}
else if (status === 'success') {
console.log("Deleted successfully");
}
});
}
}
我的开关盒:
switch($_POST['action']){
case 'deleteRegistro':
$id = $_POST['id'];
$tableName = $_POST['tableName'];
$field = $_POST['field'];
echo "Hello!";
?>
<script>alert("Hello!");</script>
<?php
break;
}
如你所见,我的 AJAX status == 'succcess'
:
这是我的完整代码,如果你需要检查的话:
<?php
use GuzzleHttp\json_decode;
include_once(DIR_PLUGINS.'/alexcrudgenerator/main.php');
$test = new GenerateCrud($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
if ($_GET['action']){
print_a($_GET['action']);
}
switch($_POST['action']){
case 'datosTabla': // OK.
//print_r($_POST['action']);
$res = json_decode($_POST['datos']);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
break;
case 'deleteRegistro':
$id = $_POST['id']; // Quiero obtener estas variables que he enviado desde la función Delete();
$tableName = $_POST['tableName']; // Quiero obtener estas variables que he enviado desde la función Delete();
$field = $_POST['field']; // Quiero obtener estas variables que he enviado desde la función Delete();
echo "Hello!";
?>
<script>alert("Hello!");</script>
<?php
break;
case 'showtable': // OK.
$res = getEntireTable($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
$tableName = $_POST['tableName'];
$tableName = json_encode($tableName);
$field = json_decode($_POST['tableFields'],1)[0];
//print_r($tableName);
//print_r('<br>');
//print_r($campo);
foreach ($res as $data){
$data->acción = "<div class='text-center'><div class='btn-group'><button id='modificar_$data->id' class='btn btn-primary btn-sm btnEditar' value='edit'><i class='material-icons'>edit</i></button><button onclick='Delete($data->id, $tableName, $field)' class='btn btn-danger btn-sm btnBorrar'><i class='material-icons' value='delete'>delete</i></button></div></div>";
$resultados['data'][] = $data;
}
$resultados = json_encode($resultados); // 7 PROPIEDADES
foreach(json_decode($_POST['tableFields']) as $columnsDB){
$fields[] = array('data'=>$columnsDB);
}
$fields[]['data'] = 'acción';
$fields = json_encode($fields);
?>
<head>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<div class="container caja">
<div class="row">
<div class="col-lg-12 col-sm-12">
<div>
<table id="tablaUsuarios" class="table table-striped table-bordered table-condensed hover" style="width:100%" >
<thead class="text-center">
<tr>
<?php
foreach (json_decode($_POST['tableFields']) as $columnsTH){
echo '<th>' . strtoupper($columnsTH) . '</th>';
}
echo '<th>ACCIÓN</th>';
?>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</div>
</div>
<script>
function Delete(id, tableName, field){
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
action: "deleteRegistro",
id: id,
tableName: tableName,
field: field
}, function (data, status){
if (status === 'error') {
console.log("Not deleted");
}
else if (status === 'success') {
console.log("Deleted successfully");
}
});
}
}
$(document).ready(function() {
var datos= <?=$resultados?>;
var dynamicColumns = <?=$fields?>;
datos = JSON.stringify(datos);
$('#tablaUsuarios').DataTable({
"language": {"url": "https://cdn.datatables.net/plug-ins/1.10.25/i18n/Spanish.json"},
"paging": true,
"lengthChange": true,
"searching": true,
"info": true,
"autoWidth": true,
"scrollX": true,
"ajax":{
"url": '<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/',
"method": 'POST',
"data":{action: "datosTabla", datos: datos}
},
"columns": dynamicColumns
});
})
</script>
<?php
break;
}
?>
有人可以帮帮我吗?实在看不懂。
如果status == 'success'
,则表示POST请求已发送成功,所以我应该进入我的case switch
并打印一个“Hello!”。
我做错了什么?
你没有在问题中提到 switch
案例在哪里,我假设它在 <?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/"
index.php 文件中好吗?
所以您正在使用 Ajax 将数据 post 发送到 php 文件,并且 Ajax 成功地 post 发送了数据,但是您怎么会可以期望 hello
显示在屏幕上吗?
正如我在之前的回答中提到的,php 文件中存在 switch case 的输出将不会显示,$.post
方法只是将数据 posts 到文件它不会重定向到文件。
根据您的需要,我建议您使用隐藏表单将数据 post 写入文件。
修改后的删除函数为..
function Delete(id, tableName, field){
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
document.getElementById("postid").value = id;
document.getElementById("postTablename").value = tableName;
document.getElementById("postfield").value = field;
document.forms['deleteform'].submit();
//Commenting old function
/*$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
action: "deleteRegistro",
id: id,
tableName: tableName,
field: field
}, function (data, status){
if (status === 'error') {
console.log("Not deleted");
}
else if (status === 'success') {
console.log("Deleted successfully");
}
});*/
}
}
现在在 html 代码中添加一个表单 deleteform
注意:- 在将此脚本用于函数 Delete()
<form name="deleteform" action="<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/" method="post">
<input type="hidden" id="postid" name="id" value="">
<input type="hidden" id="postTablename" name="Tablename" value="">
<input type="hidden" id="postfield" name="field" value="">
</form>
提交此表单后,您将进入给定 URL 中的 php 文件,在这里您可以使用从 post 获得的数据做任何您想做的事情方法。
如果您不想重定向到 php 包含 switch case 的文件,则只显示 data
您从该页面获得的文件。
function Delete(id, tableName, field){
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true) {
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/", {
action: "deleteRegistro",
id: id,
tableName: tableName,
field: field
}, function (data, status){
if (status === 'error') {
console.log("Not deleted");
}
else if (status === 'success') {
console.log("Deleted successfully" + "This is the response:- " + data);
}
});
}
}
现在您可以在控制台中看到文件的响应,在您的情况下,它应该向您显示 hello
,因为您没有回显任何其他内容。