0

我想对一个名为 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 调用时,它会立即在浏览器中返回成功消息,并且当我在我的谷歌开发工具窗口上观看网络选项卡时,成功消息似乎显示在php 文件甚至被加载。我试过设置异步:假。

添加 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.");
        }
    });
};
4

1 回答 1

3

如果您的 PHP 文件中有多个函数,那么您可以执行以下操作:: 在您的 jQuery ajax 中传递额外的参数,例如:

$.ajax({
    url: "some_file.php?action=get_accounts"
}).done(function() {
    $( this ).addClass( "done" );
});

并在您的 PHP 文件中使用switch根据action您的 ajax 中变量的值调用适当的函数,例如:

//in PHP
.....
$action = $_GET['action'];
switch ($action) {
    case "get_accounts":
        //call the function
        get_accounts();
        break;
    case "otherFunction":
        ....
        break;
}
于 2013-11-01T10:27:20.640 回答