2016-12-07 38 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