remove method is hanging pending
devmondo opened this issue ยท 15 comments
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
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
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!
I don't remember if it's operation remove
or delete
but check it out.
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"}
The problem was caused because your server doesn't accept payload when doing DELETE.
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
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.
very true, thanks again for the support
๐
Just ran across this myself. Using:
RestangularProvider.setRequestInterceptor(function(elem, operation) {
if (operation === "remove") {
return undefined;
}
return elem;
});
Is the solution.
The above doesn't work for me but this works:
RestangularProvider.setRequestInterceptor(function(elem, operation) {
if (operation === "remove") {
return null;
}
return elem;
});
@ralbu works for me! Thank you!
RestangularProvider.setRequestInterceptor(function(elem, operation) {
if (operation === "remove") {
return null;
}
return elem;
});
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
It does not work. It still sends {} as payload, and what is worse, it sends Content-Type:text/plain;charset=UTF-8.
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.
setRequestInterceptor is deprecated see here
addRequestInterceptor works.
RestangularProvider.addRequestInterceptor(function(elem, operation, what, url) {
if (operation === "remove") {
return null;
}
return elem;
});