使用Ajax加载更新数据不起作用

时间:2015-08-08 23:58:44

标签: javascript php ajax forms gif

我有一个可以插入,更新和删除数据的管理页面。我想在执行任何这些操作时显示一个简单的加载gif。所有3个操作都可以完美地工作,但是当我尝试使用它时,它会停止工作。

以下是我的Ajax代码。此代码只是在提交表单后立即显示其中包含加载gif的div,如果成功完成,则再次隐藏它。这很容易。

$("#form").submit(function(e) {
    e.preventDefault();

    $("#loading").show();

    $.ajax({
        url: "Operations.php",
        dataType: "HTML",
        success: function() {
            $("#loading").hide();
        }
    });
});

现在,每个表单执行的Operations.php包含3个数据库操作。它存储由hidden字段发送的类的名称,从提交的表单的button接收值,并根据其值,实例化ServiceDatabase传递类并执行一个动作。

$class = filter_input(INPUT_POST, "class");
$id = filter_input(INPUT_POST, "id");

@require_once "../../php/Connection.php";
@require_once "../../php/ServiceDatabase.php";
@require_once "../../php/" . $class . ".php";

$Operation = new ServiceDatabase($connection, new $class);

switch ($_REQUEST["submit"]) {
    case "insert":
        $Operation->setPostVariables();
        $Operation->insert();
        break;
    case "update":
        $Operation->setPostVariables();
        $Operation->update($id);
        break;
    case "delete":
        $Operation->delete($id);
        break;
}

最后,只是形式。

<form id="form" class="center-block" action="Operations.php" method="post">
    <h3>Alterar - <small><?php echo $class ?></small></h3>

    <input type="hidden" value="<?php echo $class ?>" name="class"/>
    <input type="hidden" value="<?php echo $id ?>" name="id"/>

    <?php echo $Table->generateAdminTables($id); ?>

    <button type="submit" name="submit" value="update" class="btn btn-success btn-update">Atualizar</button>
</form>

发生的情况是数据库操作(在本例中为更新)不起作用,就好像它没有到达Operations.php文件一样。

3 个答案:

答案 0 :(得分:0)

您需要设置从表单中获取的POST数据。

$.ajax({
    url: "Operations.php",
    method: "POST", // defaults to get
    data: $(this).serialize(), // get the form data and send it
    dataType: "HTML",
    success: function() {
        $("#loading").hide();
    }
});

答案 1 :(得分:0)

似乎$_REQUEST不适用于Ajax。真是个惊喜。

我的解决方案是:我在表单中创建了一个新的hidden,以便通过jQuery接收所点击的value的{​​{1}}:

button

然后在btnValue = ""; $("#form button").click(function() { btnValue = $(this).attr("value"); }); 之前,我设置$.ajax值:

hidden

在我的$(this).find("#action").attr("value", btnValue); 中,收到了新的Operations.php

$_POST

$action = filter_input(INPUT_POST, "action"); 区块中,我只需查看switch

$action

工作得很好。

答案 2 :(得分:0)

试试这个。我没有测试但它会起作用。

$("#form").submit(function (e) {
    e.preventDefault();

    $("#loading").show();

    $.ajax({
        url: "Operations.php",
        dataType: "HTML",
        success: function () {
            $("#loading").hide();
        },
        error: function (data) {
        },
        complete: function (data) {
            $("#loading").hide();
            //A function to be called when the request finishes
            // (after success and error callbacks are executed).
        }
    });
});