ajax url 指向单独文件中的 php 函数
ajax url point to a php function in seperatet file
我在使用 ajax 时遇到了一些问题(从未使用过)。
我想从表格中删除选定的行而不刷新页面,并且不为查询创建新文件。如果可能,我想保留 functions.php 中的所有功能吗?
我这里有 3 个文件。
- 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();
}
$.ajax({ url: 'FUNCTIONS.PHP',
data: {action: 'delete', delete: '123'},
type: 'post',
success: function(output) {alert(output);}
});
在function.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>
你的function.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();
}
?>
正确解:
- 构建一些您可以从浏览器调用的操作,例如
yuorurl.com/post/delete/123
、123 - 您的 post id
- 在服务器端创建可以处理此操作的函数(检查权限,e.t.c),returns
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 时遇到了一些问题(从未使用过)。 我想从表格中删除选定的行而不刷新页面,并且不为查询创建新文件。如果可能,我想保留 functions.php 中的所有功能吗?
我这里有 3 个文件。
- 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();
}
$.ajax({ url: 'FUNCTIONS.PHP',
data: {action: 'delete', delete: '123'},
type: 'post',
success: function(output) {alert(output);}
});
在function.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>
你的function.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();
}
?>
正确解:
- 构建一些您可以从浏览器调用的操作,例如
yuorurl.com/post/delete/123
、123 - 您的 post id - 在服务器端创建可以处理此操作的函数(检查权限,e.t.c),returns
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) {}
})
}