Skip to content

remove method is hanging pending #193

Closed

Description

@devmondo

hi,
when i do for example
listItem.remove();
chrome keeps hanging until i refresh the page

Side note : i have to admit that i have came to see restangular like 3 or 4 times and could not understand the benefit until i played with the code and now i say wow you are genius, i makes life so much easier and code more concise, thanks for this awesome library

Activity

  1. devmondo commented on Jul 20, 2013

    @devmondo
    Author

    hi again,
    i have made some investigation and using angular's $http works fine, so there must be something wrong here is my code

    $scope.remove = function(listItem) {
       //this works                                
      $http({method: 'DELETE', url: '/administration/api/customers/'+listItem.id}).
      success(function(data, status, headers, config) {
          console.log("http delete is ok")
      }).
      error(function(data, status, headers, config) {
          console.log("http delete is not ok")
      });
       //this does not work
        listItem.remove().then(function() {
                         // Updating the list and removing the user after the response is OK.
                        //    $scope.list = _.without($scope.list, listItem);
                        //});
                    }
    
                }
    

    what i have also noticed is that there is difference in the request that is sent, and it maybe causing the problem.

    i have also noticed that restangular add this header only to get, while it should be json
    Content-Type:application/xml

    by the way i am using ASP.NET MVC with IIS 8

    the $http method request body :
    Accept:application/json, text/plain, /
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:en-US,en;q=0.8,ar;q=0.6
    Connection:keep-alive
    Content-Length:0
    Content-Type:application/xml
    Host:www.testsite.com
    Origin:http://www.testsite.com
    Referer:http://www.testsite.com/english/en-us/administration/index
    User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36

    the restangular method request body :

    Accept:application/json, text/plain, /
    Content-Type:application/xml
    Origin:http://www.testsite.com
    Referer:http://www.testsite.com/english/en-us/administration/index
    User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36

  2. mgonto commented on Jul 20, 2013

    @mgonto
    Owner

    Hey,

    remove by default on Restangular sends a request with an empty object.

    If you need it to be an empty request, just add a requestInterceptor like:

    RestangularProvider.setRequestInterceptor(function(elem, operation) {
      if (operation === "remove") {
         return undefined;
      } 
      return elem;
    });

    That's the only difference I see that is important between those 2 requests.

    Did you check that the route is the same? Is the route OK?

    Bests!

  3. mgonto commented on Jul 20, 2013

    @mgonto
    Owner

    I don't remember if it's operation remove or delete but check it out.

  4. devmondo commented on Jul 20, 2013

    @devmondo
    Author

    thank you very much for the response, the interceptor worked, why this is causing all the problems ?
    before interceptor addition, remove was adding a request load like this but now it is not, so i guess this was the problem, but still i don't know why it would cause a problem, and yes route is the same

    {"id":"TestModels/450"}
    
  5. mgonto commented on Jul 20, 2013

    @mgonto
    Owner

    The problem was caused because your server doesn't accept payload when doing DELETE.

  6. devmondo commented on Jul 20, 2013

    @devmondo
    Author

    i have came at this SO thread and if you read darrel comment, he says that HTTP semantics state that Delete with Payload is not semantic

    http://stackoverflow.com/a/17427222

  7. mgonto commented on Jul 20, 2013

    @mgonto
    Owner

    With Restangular you can use whatever you want, that's the idae. If you need no Payload, you can do it, with this configuraiton I sent you above. That's the whole idea of Restangular that you can conigure easily and that it has some safe defaults.

  8. devmondo commented on Jul 21, 2013

    @devmondo
    Author

    very true, thanks again for the support

  9. nodesocket commented on Sep 26, 2014

    @nodesocket

    👍

    Just ran across this myself. Using:

    RestangularProvider.setRequestInterceptor(function(elem, operation) {
      if (operation === "remove") {
         return undefined;
      } 
      return elem;
    });
    

    Is the solution.

  10. ralbu commented on Nov 12, 2014

    @ralbu

    The above doesn't work for me but this works:

    RestangularProvider.setRequestInterceptor(function(elem, operation) {
    if (operation === "remove") {
    return null;
    }
    return elem;
    });

  11. mrova commented on Nov 18, 2014

    @mrova

    @ralbu works for me! Thank you!

    RestangularProvider.setRequestInterceptor(function(elem, operation) {
      if (operation === "remove") {
         return null;
      } 
      return elem;
    });
  12. jasmeetssalech commented on Feb 25, 2015

    @jasmeetssalech

    How can I pass single parameter say an Integer in customPost and remove?
    say a replacement of this:
    http://localhost:8080/addClass/'+$scope.classID

    Thanks

  13. rhodul commented on Sep 1, 2015

    @rhodul

    It does not work. It still sends {} as payload, and what is worse, it sends Content-Type:text/plain;charset=UTF-8.

  14. ezk84 commented on Oct 28, 2015

    @ezk84

    Also run into the Content-Type: text/plain;charset=UTF-8 issue with version 1.5.1 of restangular, this causes problems with my server.

  15. kamleshkrjha commented on May 4, 2018

    @kamleshkrjha

    setRequestInterceptor is deprecated see here

    addRequestInterceptor works.

     RestangularProvider.addRequestInterceptor(function(elem, operation, what, url) {
    
                if (operation === "remove") {
                    return null;
                }
    
                return elem;
    
            }); 
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions