2016-12-07 23 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"); 
       } 
      ); 
     } 
    }); 

今、私はボタンをクリックするたびに、その行を削除しないであろうと、コンソールはそのログません。ステートメント。成功と失敗のコールバックがうまくいかない理由は不思議です。サーバースクリプトが有効なJSONレスポンスを返していない

どうもありがとう

+0

コンソールログにエラーがありますか?ブラウザの[ネットワーク]タブを確認すると、AJAXリクエストを送信していますか? – Barmar

+0

@Barmarコンソールログにエラーはありません。実際にajaxリクエストが送信され、その行がdb内で削除されたことがわかります – singard

+0

[ネットワーク]タブでJSONレスポンスが表示されますか? – Barmar

答えて

0

ので(JSONが失敗したとして、応答を解析しようとするので)、それは失敗コールバックを呼び出す必要があります。しかし、そのオプションの正しい名前はerror:であり、failure:ではありません。サーバは、JSONレスポンスを送り返すdataType:オプションを除外することになっていない場合は

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

、それはそれを解析しようとしません。だから、それを変更します。

+0

コンソールログが「削除に失敗しました」というメッセージが表示されますが、リクエストがサーバー側で処理され、dbで更新されていると、エラーを返すのはなぜですか? – singard

+0

サーバーが正しいJSONを返送していないためです。 'dataType: 'json''を指定したので、レスポンスを解析する際にエラーが発生すると、' error: 'ハンドラが呼び出されます。 – Barmar

+0

今、なぜそれが表示されます。応答に別のデータ型を指定する方法はありますか?私の反応はjson型ではないからです。または、応答データを破棄することはできますか? – singard

関連する問題