AJAX 成功失败回调不起作用

sin*_*ard 5 javascript ajax jquery callback

我有一张桌子,有一个删除按钮。基本上我想做的是,当我单击删除按钮时,它会向我们的服务器发送删除请求并在数据库上更新。如果成功,它将从表中删除该行。

配置.js

var SiteConfigProxy = function () {
"use strict";

var getSiteConfig = Config.apiUrl + "/configs/site/{siteId}";
var addDevice = Config.apiUrl + "/configs/device/{deviceId}";

var delete1 = function (url, data, done, fail){
    $.ajax({
        type: "DELETE",
        url: url,
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            if (typeof (done) === 'function') done(data);
        },
        failure: function (data) {
            if (typeof (fail) === 'function') fail(data);
        }
    });
};

return {
    deleteDeviceConfig: function (deviceId, data, done, fail){
        delete1(addDevice.replace("{deviceId}", deviceId), data, done, fail);
    }
};
} ();
Run Code Online (Sandbox Code Playgroud)

站点配置.js

        configTable.on("click", ".delete", function (event) {
        event.preventDefault();
        if (confirm("Are you sure to delete this row?")) {
            var tableRow = $(this).parents("tr")[0];
            var data = {
                siteId: tableData.fnGetData(tableRow)[1],
                hostname: tableData.fnGetData(tableRow)[2]
            };

            SiteConfigProxy.deleteDeviceConfig(tableData.fnGetData(tableRow)[0], data,
                function(data){
                    tableData.fnDeleteRow(tableRow);
                    console.log("delete succeeded");
                },
                function(data){
                    console.log("delete failed");
                }
            );
        }
    });
Run Code Online (Sandbox Code Playgroud)

现在,每次我单击按钮时,它都不会删除该行,控制台也不会记录该语句。我只是想知道为什么成功和失败回调不起作用。

多谢

Bar*_*mar 4

由于您的服务器脚本没有返回有效的 JSON 响应,因此它应该调用失败回调(因为尝试将响应解析为 JSON 失败)。但该选项的正确名称是error:, not failure:。所以将其更改为:

    error: function (data) {
        if (typeof (fail) === 'function') fail(data);
    }
Run Code Online (Sandbox Code Playgroud)

如果服务器不应该发回 JSON 响应,请忽略该dataType:选项,它不会尝试解析它。