2016-12-07 41 views
0

我有一个表,我有一个删除按钮。基本上我想要做的是当我点击删除按钮时,它会发送一个DELETE请求到我们的服务器并在db上更新。如果成功,它会从表中删除该行。AJAX成功失败回调不起作用

Config.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); 
    } 
}; 
}(); 

siteconfig.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"); 
       } 
      ); 
     } 
    }); 

现在,当我点击按钮,每一次,它不会删除该行控制台将无法登录该声明。我只是想知道为什么成功和失败回调不起作用。

非常感谢

+0

控制台日志中是否有任何错误?如果您检查浏览器的网络标签,您是否看到它发送AJAX请求? – Barmar

+0

@Barmar控制台日志中没有错误。 ajax请求实际上是发送的,我可以看到该行已经在db中删除 – singard

+0

您是否在网络标签中看到JSON响应? – Barmar

回答

0

因为你的服务器脚本不返回有效的JSON响应,它应该调用相应的回调函数(因为试图为JSON无法解析响应)。但该选项的正确名称是error:,而不是failure:。因此,将其更改为:

error: function (data) { 
     if (typeof (fail) === 'function') fail(data); 
    } 

如果服务器不应该发回一个JSON响应,离开了dataType:选项,也不会尝试分析它。

+0

现在我可以看到控制台日志“已删除失败”,但为什么它会返回错误,如果请求正在通过服务器端进行处理并在db上进行更新? – singard

+0

因为服务器没有发回正确的JSON。由于您指定了'dataType:'json'',因此解析响应的错误会导致调用'error:'处理程序。 – Barmar

+0

好了,现在我明白了为什么。有没有办法指定一个不同的数据类型作为响应?因为我的回应不是json类型。或者我可以放弃响应数据? – singard