ow.. my.. god... :( so after moving all code out to a clean project and
trying every kind of alternative to the standard post.. e.g adding headers
etc. I figured to just face up to the fact that its impossible that there
was a problem with the controller or factory. It then dawned on me that the
page might be at fault and upon checking i had inadvertently also been
POSTing the page back along with the ng-click event.. This is why it fell
over and quite subtly.. after removing the form and testing everything
works fine. Sander appreciate the help and i am still very interested in
using your solution. Deferring / callbacks are new(ish) to me as i am from
c#.net but im eager to get to grips with them and learn where each is best
used also $q etc.
On Wednesday, March 2, 2016 at 4:13:52 PM UTC, Neil Hewitt wrote:
>
> 'use strict';
> app.factory('addressService', ['$http', '$q', 'ngAuthSettings',
> function($http, $q, ngAuthSettings) {
>
> var serviceBase = ngAuthSettings.apiServiceBaseUri;
> var addressServiceFactory = {};
> var _createAddress = function(address) {
> var mydata = {
> title: 'foo',
> body: 'bar',
> userId: 1
> }
>
> var deferred = $q.defer();
>
> $http.post('http://jsonplaceholder.typicode.com/posts', mydata, {
> headers: {
> 'Content-Type': 'application/x-www-form-urlencoded'
> }
> }).success(function(response) {
> alert("success");
> deferred.resolve(response);
> }).error(function(err, status) {
> alert("fail");
> deferred.reject(err);
> });
> return deferred.promise;
> };
>
> addressServiceFactory.getAddresses = _getAddresses;
> addressServiceFactory.createAddress = _createAddress;
> return addressServiceFactory;
> }]);
>
> app.controller('createAddressController', ['$scope', 'addressService',
> 'attributeService', function($scope, $addressService, $attributeService) {
> $scope.createAddress = function() {
> $addressService.createAddress($scope.address)
> .then(function(results) {
> alert("commited");
> $state.go('addresses');
> //$scope.addresses = results;
> }, function(error) {
> alert("Oops there has been an error saving the address");
> });
> };
> }]);
>
> ive cleaned the code up above..(easier to read)
>
> On Wednesday, March 2, 2016 at 4:00:22 PM UTC, Neil Hewitt wrote:
>>
>> Hi Sander thanks for the help. This code is contained within a factory
>> which is why i was using the defer (though i may still be wrong doing
>> so).The idea being that as i cannot wait for the response i have to pass
>> the promise back to the controller and continue in the .then of the
>> original call (still getting used to async).
>> Ive included my full factory and controller below and have hooked up to a
>> opensource API just to rule my API out. Now i'm starting to think there may
>> be something going on network wise my end as this only works
>> intermittently. When it works i can see (via fiddler) that data is passed
>> to the service (Json Object) see below 1 success 2 fails.
>>
>> <https://lh3.googleusercontent.com/-TbAchqjdeo4/VtcNg7M_MdI/AAAAAAAALP4/WfoLmL5BAL8/s1600/Snap%2B2016-03-02%2Bat%2B15.57.40.png>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> When it does not work no data is passed.. its really strange. Im very
>> intrigued by the sample you provided and the potential to remove the
>> defer/. Please would you be able to demonstrate a call from a controller
>> calling a service and handling error/success ?
>>
>> 'use strict';
>> app.factory('addressService', ['$http', '$q', 'ngAuthSettings',
>> function ($http,$q, ngAuthSettings) {
>>
>> var serviceBase = ngAuthSettings.apiServiceBaseUri;
>> var addressServiceFactory = {};
>> var _createAddress = function (address) {
>> var mydata = {
>> title: 'foo',
>> body: 'bar',
>> userId: 1
>> }
>>
>> var deferred = $q.defer();
>>
>> $http.post('http://jsonplaceholder.typicode.com/posts', mydata,
>> { headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
>> }).success(function (response) {
>> alert("success");
>> deferred.resolve(response);
>> }).error(function (err, status) {
>> alert("fail");
>> deferred.reject(err);
>> });
>> return deferred.promise;
>> };
>>
>> addressServiceFactory.getAddresses = _getAddresses;
>> addressServiceFactory.createAddress = _createAddress;
>> return addressServiceFactory;
>> }]);
>>
>> app.controller('createAddressController',
>> ['$scope','addressService','attributeService', function
>> ($scope,$addressService,$attributeService) {
>> $scope.createAddress = function (){
>> $addressService.createAddress($scope.address)
>> .then(function (results) {
>> alert("commited");
>> $state.go('addresses');
>> //$scope.addresses =
>> results;
>> }, function(error){
>> alert("Oops there has been an error saving the address");
>> });
>> };
>> }]);
>>
>> Thanks again for the assistance.
>>
>>
>>
>> On Wednesday, March 2, 2016 at 12:49:35 PM UTC, Sander Elias wrote:
>>>
>>> Hi Neil,
>>>
>>> First of all, you should drop the entirely unneeded defer.
>>> This will do exactly the same:
>>>
>>> var _createAddress = function (address) {
>>> return $http.post(serviceBase + 'api/Addresses/Address',address)
>>> .then(function (response) {return response.data}); // strip out
>>> the data from the response, wich is the only difference between .success
>>> and .then
>>> };
>>>
>>> Do I read it correctly that you are debugging your server? If this is
>>> the case, setting the breakpoint might be the cause of the err:null.
>>>
>>> Regards
>>> Sander
>>>
>>
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.