我在ajax方面遇到了一些问题(从未使用过它(。我想从选项卡中删除所选行,而不刷新页面,也不为查询创建新文件。如果可能的话,我想保留functions.php中的所有函数?
我这里有三个文件。
- index.php
- ajax.js
- functions.php
索引文件:
$res = articles($db);
foreach($res as $res){
$id = $res['article_id'];
echo "<form action='' method='post'>";
echo "<input type=hidden" name='delete' value="<?php echo $id;?>">
echo "<input type='submit' name='delete_article'>";
echo "</form>";
}
ajax调用
$.ajax({ url: 'HERE I WANT TO RUN THE DELETE FUNCTION FROM FUNCTIONS.PHP',
data: {action: 'test'},
type: 'post',
success: function(output) {
alert(output);
}
});
功能
function delete_article($db){
$id = $_POST['delete'];
$sql = "DELETE FROM articles WHERE article_id = :article_id";
$stmt = $db->prepare($sql);
$stmt->bindValue(':article_id',$id);
$stmt->execute();
}
真正的解决方案:
- 构建一些可以从浏览器调用的操作,例如
yuorurl.com/post/delete/123
123-您的帖子id - 在服务器端创建可以处理此操作(检查权限,e.t.c(的函数,并在成功时返回
true
,在失败时返回false
- 在客户端,在ajax处理程序中,在成功时删除post元素
示例:
PHP
function delete($id) {
$result = [];
try {
$this->yourPostService->delete($id); // handle your sql here
$result = ['result' => true];
} catch(Exception $e) {
$result = ['result' => false, 'error' => $e->getMessage()];
}
echo json_encode($result);
exit;
}
JS
$.ajax({ url: 'yourl/post/delete/'+id, // your post id
data: {},
type: 'post',
success: function(data) {
var data = $.parseJson(data);
if(data.result) {
$('#post'+id).remove(); //your post element
} else {
console.log(data.error)
}
}
});
我认为一个好的方法是使用REQUEST_METHOD。
php
switch (strtolower($_SERVER['REQUEST_METHOD'])) {
case "post":
someFunctionToSave($_GET["postId"]);
break;
case "get":
someFunctionToRetrieve($_GET["postId"]);
break;
case "delete":
someFunctionToDelete($_GET["postId"]);
break;
default:
break;
}
js
function deletePost (id) {
$.ajax({ url: 'function.php?postId=' + id,
data: {},
type: 'delete',
success: function(data) {}
})
}
function savePost (id) {
$.ajax({ url: 'function.php?postId=' + id,
data: {},
type: 'post',
success: function(data) {}
})
}
function getPost (id) {
$.ajax({ url: 'function.php?postId=' + id,
data: {},
type: 'get',
success: function(data) {}
})
}
$.ajax({ url: 'FUNCTIONS.PHP',
data: {action: 'delete', delete: '123'},
type: 'post',
success: function(output) {alert(output);}
});
在功能中.php
if(isset($_POST['action'] && $_POST['action'] == 'delete')
delete_article($db);
首先,您的代码中有不少拼写错误。所以,如果有什么东西要运行,你需要修复它们。记住这一点,这里有一个简短的代码修订版,应该可以工作。(我没有测试过(。
我建议使用带有GUI的编辑器来帮助您识别HTML和PHP编码的问题。
您的索引文件:
<?
$res = articles($db);
foreach ($res as $res) {
$id = $res['article_id'];
echo "<form action='' method='post'>";
echo "<input type=hidden name='delete' id='article_id' value = '$id' >";
echo "<input type='button' name='delete_article' onclick='delete_article('"$id'")'>";
echo "</form>";
}
?>
您的Javascript:
<script>
function delete_article(articleId) {
$.ajax({
url: 'function.php',
data: {
action: 'test',
article: articleId
},
type: 'post',
success: function (output) {
alert(output);
}
});
}
</script>
您的功能.php
<?php
$action = (isset($_POST['action'])) ? $_POST['action'] : false;
switch (strtolower($action)) {
case "test":
/* create your $db connection */
delete_article($db);
break;
default:
break;
}
echo "OK";
exit;
function delete_article($db){
$id = $_POST['delete'];
$sql = "DELETE FROM articles WHERE article_id = :article_id";
$stmt = $db->prepare($sql);
$stmt->bindValue(':article_id',$id);
$stmt->execute();
}
?>