[英]Send data to the server using POST request with jQuery
我想做的事:
$.post
jQuery 快捷方式將數據發送到我的服務器。問題是什么:
switch case
,可能是因為我的action
沒有正確發送。我正在嘗試做的事情:
我創建了一個表格,其中一個元素是一個帶有onclick
JavaScript 函數的<button onclick='Delete()'></button>
: <button onclick='Delete()'></button>
。
我的 JavaScript 函數:
function Delete(){
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/res/?action=deleteRegistro", function(data){
if(data){
console.log("Deleteeeed");
}
else {
console.log("Not deleted :(");
}
});
}
switch case
語句:switch($_POST['action']){
case 'deleteRegistro': // NOT OK
?>
<script>
alert("I'm in deleteRegistro");
</script>
<?php
break;
}
這應該可以工作,因為我將我的 post 請求中的操作deleteRegistro
傳遞到我的服務器 (php)。
我需要一些幫助,我做錯了什么?
如果您想查看它,這是我的完整代碼:
<?php
include_once(DIR_PLUGINS.'/alexcrudgenerator/main.php');
$test = new GenerateCrud($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
switch($_POST['action']){
case 'datosTabla': // OK.
$res = json_decode($_POST['datos']);
echo json_encode($res, JSON_UNESCAPED_UNICODE);
break;
case 'deleteRegistro': // NOT OK
?>
<script>
alert("I'm in deleteRegistro");
</script>
<?php
break;
case 'showtable': // OK.
$res = getEntireTable($_POST['tableName'], $_POST['id'], $_POST['tableFields']);
$tableName = $_POST['tableName'];
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()' 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);
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(){
$.post("<?=SITE_URL_ADMIN?>/alexcrudgenerator/res/?action=deleteRegistro", function(data){
if(data){
console.log("Deleteeeed");
}
else {
console.log("Not deleted :(");
}
});
}
$(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;
}
?>
您正在查詢字符串中傳遞操作,而不是請求正文,因此它將在$_GET
而不是$_POST
可用。
PHP 超全局變量$_GET
和$_POST
不(直接)引用請求類型。 它們指的是 HTML 表單將根據method
屬性放置來自輸入的數據的位置。
任何類型的 HTTP 請求都可以在 URL 中包含一個查詢字符串,這將被放入$_GET
超全局變量中。
並非所有 HTTP 請求都可以有請求正文,但很多(包括 POST 和 PUT)可以。 如果以 PHP 理解的格式編碼並且Content-Type
正確,PHP 將使用請求正文中的數據填充$_POST
。 (PHP 也可能會檢查請求類型,並且只對 POST 請求執行此操作,這不是我調查過的)。
您以錯誤的方式發布到文件中,據我所知,這可能是問題所在。
$.post("URL", {
action: "deleteRegistro"
}, function (data, status) {
// alert (data + '\n' + "status" + status);
if (status === 'error') {
console.log("Not deleted"); // For debugging purpose
} else if (status === 'success') {
console.log("Deleted successfully");
}
});
將正確的 URl 替換為“URL” 無需在 switch case 中更改任何內容。
但即使在此之后您可能看不到表中的數據被刪除,您需要刷新頁面。
由於您在單頁中擁有所有這些功能,我建議您使用隱藏表單來發布數據。
也許這個 php 代碼在 js 中不起作用。 您可以在這樣的隱藏輸入中獲取它;
<input id="takeUrl" type="hidden" value="<?=SITE_URL_ADMIN?>">
let url = $('#takeUrl').val();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.