为啥当我得到我的数据时似乎未定义/为空?我正在使用 jQuery.post() 从 JS 向 PHP 发送数据
Posted
技术标签:
【中文标题】为啥当我得到我的数据时似乎未定义/为空?我正在使用 jQuery.post() 从 JS 向 PHP 发送数据【英文标题】:Why when I get my data seems undefined/empty? I'm sending data with jQuery.post() from JS to PHP为什么当我得到我的数据时似乎未定义/为空?我正在使用 jQuery.post() 从 JS 向 PHP 发送数据 【发布时间】:2021-09-19 19:28:20 【问题描述】:我的问题:我正在使用 jQuery 的 $.post
方法向我的 php 发送数据。出于某种原因,data
似乎未定义。
让我解释一下我的代码的结构...
1.我有以下带有 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 id='deleteID_$data->id' onclick='Delete($data->id, $tableName, $idName)' class='btn btn-danger btn-sm btnBorrar'><i class='material-icons' value='delete'>delete</i></button></div></div>";
相同的代码缩进以获得更好的可读性:
$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
id='deleteID_$data->id'
onclick='Delete($data->id, $tableName, $idName)'
class='btn btn-danger btn-sm btnBorrar'
>
<i class='material-icons' value='delete'>delete</i>
</button>
</div>
</div>
";
2。我的Delete()
函数:
function Delete(id, tableName, idName)
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true)
console.log("First parameter: " + id + "\nSecond parameter: " + tableName + "\nThird parameter: " + idName); // I GET MY FUNCTION PARAMETERS.
console.log("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/?action=deleteRegistro&tabla=" + tableName + "&nombre_campo=" + idName + "&id=" + id); // I GENERATE MY POST URL CORRECTLY.
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/?action=deleteRegistro&tabla=" + tableName + "&nombre_campo=" + idName + "&id=" + id, function(data)
console.log("My data: " + data);
if(data == 1)
console.log("Data OK");
//$().hide();
else if (data == '')
console.log("Data empty");
else if (data == null)
console.log("Data null");
else if (data)
console.log("Data exist");
else
console.log("Other reasons");
);
3.所以你可以看到console.log()
返回的内容:
为什么没有定义data
?
编辑:这是我的完整代码:(我不想上传完整代码以免造成混淆,我尝试将其最小化并压缩)。
<?php
use GuzzleHttp\json_decode;
include_once(DIR_PLUGINS.'/alexcrudgenerator/main.php');
$test = new GenerateCrud($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
$action = $_POST['action'];
if(empty($action))
$GET = get_vars_for_get();
$action = $GET['action'];
switch($action)
case 'datosTabla': // OK.
//print_r($_POST['action']);
$res = json_decode($_POST['datos']);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
break;
case 'deleteRegistro':
//die("Hola");
$tableName = $_POST['tableName']; // Nombre de la tabla de la base de datos (String).
$id = $_POST['id']; // ID (int).
$idName = $_POST['idName']; // Nombre del campo ID (String).
echo $tableName;
//echo deleteRegistro($tableName, $id, $idName);
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];
//$field = json_encode($field);
$idName = $_POST['id'];
$idName = json_encode($idName);
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 id='deleteID_$data->id' onclick='Delete($data->id, $tableName, $idName)' 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, idName)
if (confirm("¿Estás seguro que deseas borrar el registro con ID " + id + "?") == true)
console.log("First parameter: " + id + "\nSecond parameter: " + tableName + "\nThird parameter: " + idName); // I GET MY DATA CORRECTLY.
console.log("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/?action=deleteRegistro&tabla=" + tableName + "&nombre_campo=" + idName + "&id=" + id); // I GET MY DATA CORRECTLY.
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/?action=deleteRegistro&tabla=" + tableName + "&nombre_campo=" + idName + "&id=" + id, function(data)
console.log("Typeof: " + typeof(data));
console.log("My data: " + data);
console.log("My data: ", data);
console.log("[" + data + "]")
if(data == 1)
console.log("Data OK");
//$().hide();
else if (data == '')
console.log("Data empty");
else if (data == null)
console.log("Data null");
else if (data)
console.log("Data exist");
else
console.log("Other reasons");
);
$(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;
?>
【问题讨论】:
也许用console.log(data);
看看输出是否符合预期?
data
不是未定义的,这就是问题所在。你有东西。
如果我尝试打印数据,我只会看到空白。 @DuchyWare
@nitrin0 我编辑了我的代码和图像,检查一下,我的data
似乎是空的,对吧?
“我的数据似乎是空的,对吧? ” - 不,它没有,它似乎包含文本 No data
。因为如果这不是您的服务器响应的内容,那么确切的文本应该来自哪里?它不包含在任何地方的 JS 代码中。
【参考方案1】:
如果您想取回数据,请使用$.get
$.get("<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/?action=deleteRegistro&tabla=" + tableName + "&nombre_campo=" + idName + "&id=" + id, function(result)
console.log(result);
);
【讨论】:
不幸的是我必须使用 POST。我正在创建一个 CRUD 表,并且我有一个巨大的案例,其中评估了POST
发送的 action
。感谢您的回答!
请注意,POST 可以/也将返回响应。无需使用 GET 来“取回数据”。【参考方案2】:
您在函数 Delete() 中提供的 URL 完全错误,
<?=SITE_URL_ADMIN?>/alexcrudgenerator/crud/res/?action=deleteRegistro&tabla=" + tableName + "&nombre_campo=" + idName + "&id=" + id
此 URl 适用于 GET 方法不发布,用于发布您不需要将数据放入 URL 的任何内容。
$.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");
if(data != '') console.log("The response is" + data);
else console.log("There is not response");
);
这里的function(data, status)
用于错误处理,其中data
是来自URL 的响应,status
是发送到URL 的数据状态。
您必须小心提供条件if(data == 1)
,其中data
是来自 URL 的响应,因此它不是布尔值。
另一方面,在发布数据的地方处理请求非常重要,因此请检查一次。
有关$.post()
的更多信息,请访问here
【讨论】:
以上是关于为啥当我得到我的数据时似乎未定义/为空?我正在使用 jQuery.post() 从 JS 向 PHP 发送数据的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 JSON 响应在 forEach 上崩溃? TypeError 未定义