2015-10-15 6 views
1

У меня такая же проблема, как упомянуто here: Я пытаюсь подключить свой магазин ExtJS 4.1 с REST API, но когда я удаляю запись из хранилища и, следовательно, вызываю метод HTTP DELETE, он отклоняется на стороне сервера, потому что HTTP-запрос, который отправил ExtJS, содержит тело. К сожалению, принятый ответ по ссылке выше недействителен для версии 4 ExtJS и выше.HTTP DELETE запрос без тела

Самое лучшее, что я достиг до сих пор послать пустой массив (буквально, []) в качестве органа, но, конечно, это все еще отвергнуто:

enter image description here

Это мой код:

Ext.define('TT.proxy.CustomRestProxy', { 
    alias: 'proxy.customrestproxy', 
    extend: 'Ext.data.proxy.Rest', 

    buildRequest: function(operation) { 

     var request = this.callParent(arguments); 

     if(operation.action === 'destroy') 
     {         
      delete request.operation.records; 
     } 
     return request; 
    } 
}); 

defineStore = function(storeName, modelName, url) { 
    var storeProperties = { 
     extend: 'Ext.data.Store', 
     requires: modelName, 
     model: modelName, 
     id: storeName, 

     proxy: { 
      type: 'customrestproxy', 
      url: url, 
      batchActions: false, 
      noCache: false, 
      headers: { 'Content-Type': 'application/json' },     
      reader: { 
       type : 'json', 
       totalProperty: 'total', 
       successProperty: 'success', 
       root: 'data' 
      }, 
      writer: { 
       type : 'json' 
      },    
     } 
    }; 

    Ext.define(storeName, storeProperties); 
}; 

Я принимаю любые ответы, которые решают эту проблему, но не обязательно включать специальные функции, связанные с ExtJS, то есть перехват запроса AJAX или аналогичной техники также приветствуется.

+0

Пожалуйста, не начинайте войну редактирования. Ознакомьтесь с политикой тегов в заголовках: http://stackoverflow.com/help/tagging – Tarabass

ответ

1

Существует обходное решение, основанное на перехватчике AJAX, вдохновленное this link. Этот код решает проблему независимо от используемой структуры, поэтому она может быть полезна и для других людей, которые не обязательно используют Ext JS:

(function(XHR) { 
    "use strict"; 

    var open = XHR.prototype.open; 
    var send = XHR.prototype.send; 
    var httpMethod; 

    XHR.prototype.open = function(method, url, async, user, pass) { 
     httpMethod = method; 
     this._url = url; 
     open.call(this, method, url, async, user, pass); 
    }; 

    XHR.prototype.send = function(data) { 
     if(httpMethod === 'DELETE') 
     { 
      data = null;    
     }   
     send.call(this, data); 
    } 
})(XMLHttpRequest);