我想对一个名为functions.php的php文件进行AJAX调用,其中我有多个相关函数(所有对数据库进行数据库更改,即添加,编辑,删除)。我一直在努力解决这个问题,因为AJAX调用似乎运行正常,但是从服务器返回的响应是空的(内容长度:0)。我回到原点,只是使用AJAX将数据发送到一个php文件,该文件只包含处理那一个调用的php代码(即没有函数),并且它工作正常。只要我将该简单语句包装到函数中,它就会再次失败。所以我正在做的事情导致php在我将它包装在函数中时不发送响应。
您是否必须以某种方式从您的ajax脚本或表单元素中的某个位置调用特定的php函数?如果有多个函数,php文件如何知道你在ajax调用中请求的函数?或者只是通过匹配$ _POST元素和发送的数据来解决它,无论$ _POST元素在哪个函数中?
我怀疑我的PHP代码应该受到指责:
function delete_account(){
require(ROOT_PATH . "/inc/database.php");
$deleteAccount = $_POST['accountName'];
try {
$results = $db->prepare("DELETE FROM account WHERE account_id_PK = ?");
$results->bindValue(1, $deleteAccount);
$results->execute();
} catch(Exception $e) {
echo "ERROR: Data could not be removed from the database. " . $e;
exit;
}
return;
}
此外,当我按下提交按钮并激活我的ajax呼叫时,它会立即在浏览器中返回成功消息,并且当我在google dev工具窗口中观看网络选项卡时,会显示成功消息貌似在php文件加载之前。我尝试过设置async:false。
添加AJAX代码:
function deleteAccount(){
event.preventDefault();
var accountName = $('.account_name').filter(":selected").attr("name");
$.ajax({
type: "POST",
url: 'inc/functions.php',
data: {accountName:accountName},
async: false,
success: function(response){
$('#results').html(response + " has been deleted.");
}
});
};
答案 0 :(得分:3)
如果您的PHP文件中有多个函数,那么您可以在jQuery ajax中执行类似:: pass in extra参数的操作,例如:
$.ajax({
url: "some_file.php?action=get_accounts"
}).done(function() {
$( this ).addClass( "done" );
});
并在PHP文件中使用switch根据ajax中action
变量的值调用适当的函数,例如:
//in PHP
.....
$action = $_GET['action'];
switch ($action) {
case "get_accounts":
//call the function
get_accounts();
break;
case "otherFunction":
....
break;
}