2016-06-02 8 views
0

Ich versuche, eine POST-Anfrage von meinem Ionic Project in Winkel zu meinem Laraval Dingo API zu machen. Wenn ich die POST-Anforderung in POSTMAN erstelle, erstellt es erfolgreich einen neuen Datensatz, aber wenn ich es in Angularjs mache, gibt es die Antwort für die GET-Anforderung zurück.Beitrag an Laraval API gibt meine GET-Anfrage zurück

Dies ist das die Antwort POSTMAN schlägt vor, für den Code für JQuery:

var settings = { 
    "async": true, 
    "crossDomain": true, 
    "url": "http://app.extremenazarene.org/api/contacts", 
    "method": "POST", 
    "headers": { 
    "authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOjEsImlzcyI6Imh0dHA6XC9cL2FwcC5leHRyZW1lbmF6YXJlbmUub3JnXC9hcGlcL2xvZ2luIiwiaWF0IjoxNDY0NjM1NDQwLCJleHAiOjE0NjQ2MzkwNDAsIm5iZiI6MTQ2NDYzNTQ0MCwianRpIjoiYmZjMTc3YzdhODk5OGE1Y2Q1NWRiYjIzOTU4YzQ5YzMifQ.fdiGmKy9ipPnvdLuapFFe8Rz6nD7ty-gkzfWq8ySO_U", 
    "cache-control": "no-cache", 
    "postman-token": "c022a35b-bbdd-2f77-f7b9-2802340dd0bb", 
    "content-type": "application/x-www-form-urlencoded" 
    }, 
    "data": { 
    "fname": "sarkinda" 
    } 
} 

$.ajax(settings).done(function (response) { 
    console.log(response); 
}); 

Meine AngularJS Anfrage ist

storeContact: function(token, data) { 
      var deferred = $q.defer(); 
      var promise = deferred.promise; 
      var settings = { 
       method: "POST", 
       url: "/api/api/contacts/", 
       headers: { 
        'Content-Type' : 'application/x-www-form-urlencoded', 
        'Authorization': 'Bearer ' +token 
       }, 
       data: data 
      }; 
      console.log(settings); 
      $http(settings).then(function mySuccess(response) { 
       deferred.resolve(response.data); 
      }, function myError(response){ 
       deferred.reject(response.statusText); 
      }); 


      promise.success = function(fn) { 
       promise.then(fn); 
       return promise; 
      }; 
      promise.error = function(fn) { 
       promise.then(null, fn); 
       return promise; 
      }; 
      return promise; 
     }, 

Der AngularJS Code eine Erfolgsantwort und gibt Daten aus der gleichen URL liefert für eine GET Anfrage. Ich glaube, dass mein Laraval-Code richtig ist, weil POSTMAN den Anruf erfolgreich ausführen und einen neuen Datensatz erstellen kann. Mit meinem angularJS-Code muss etwas nicht stimmen.

Hinweis Ich habe auch versucht, Daten über Winkel js formated wie das Senden:

data: {'fname':'testname'} 
+0

Versuchen Sie den Inhaltstyp in 'application/json' zu ändern und versuchen Sie es erneut –

+1

@Justin Bitte beachten Sie, dass angularjs ajax Anfrage auf eine seltsame Weise verarbeiten. Tatsächlich wurden alle POST-Daten in den Hauptteil der Anfrage eingefügt. Können Sie versuchen, den Inhalt des Hauptteils der Anfrage zum Beispiel wie folgt abzulegen: öffentliche Funktion foo (Anfrage $ Anfrage) { var_dump ($ Anfrage-> getContent()); sterben; } – erwan

+1

Ich stimme @erwan zu - In meinen eckigen Projekten verwende ich '$ data = file_get_contents ('php: // input');' um an die Daten zu kommen, anstatt '$ _POST' zu verwenden. – swatkins

Antwort

0

Ihr Winkel Code wird es ein anderer Endpunkt schlägt wahr?

  • Angular /api/api/contacts/
  • Postman /api/contacts

Könnte dies das Problem sein?

+0

Ich habe einen Proxy wegen der CORS-Probleme hinzugefügt. Alle meine anderen $ http Get, PATCH, DELETE funktionieren alle gut mit dem/api/api/contacts /. Ich habe anscheinend Probleme mit der POST-Anfrage. – Justin

0

Also ich weiß nicht, wie die $ http zu beheben, aber ich verwendet $ resource statt und es funktioniert jetzt:

.service('ContactsService1', function($resource) { 
     return { 
      contacts: function(token) { 
       return $resource('/api/contacts/:contact', 
     {contact: "@contact"}, 
     { get: { 
       method: 'GET', 
       headers: { 
        'Authorization' : 'Bearer ' + token 
       } 
      }, 
      delete: { 
       method: 'DELETE', 
       headers: { 
        'Authorization' : 'Bearer ' + token 
       } 
      }, 
      save: { 
       method: 'POST', 
       headers: { 
        'Content-Type' : 'application/x-www-form-urlencoded', 
        'Authorization' : 'Bearer ' + token 
       }, 
       transformRequest: function(obj) { 
        var str = []; 
        for(var p in obj) 
         str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
        return str.join("&"); 
       } 
      }, 
     } 
     ) 
    }} 

    }); 

Für meine Controller dies mein Code war:

ContactsService1.contacts($scope.token).save(null, $scope.contact, function(data){ 
       $scope.result = data; 
       console.log($scope.result); 
       $state.go('menu.contacts', {}, {reload: true}); 
      }, function(data){ 
       if(data =='Unauthorized'){ 
        window.localStorage.removeItem("token"); 
        $state.go('login'); 
       }else{ 
        //console.log(data); 
       } 
      }); 
Verwandte Themen