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.

Reply via email to