2013-02-15 4 views
1

Je passe de jquery $ .ajax, qui fonctionnait correctement, à l'utilisation de AngularJS $ http.put pour accéder à une API reposante.

Je peux faire un appel API, mais les données PUT ne reçoit pas envoyé - donc mon API voit une requête PUT avec un objet de données vide, ce qui devrait contenir une chaîne JSON ->data.values = 'a json structure'

$http.put(
    $rootScope.api_url, 
     { 
      values: jsonifiedValues 
     }, 
     { 
     headers: { 
      apihash: sha256hash 
     } 
    }).success(function(data,status,headers,config){ 
     // handle success 
}).error(function(data,status,headers,config) { 
     // handle failure 
}); 

Je n'ai jamais utilisé le $ $ d'AngularJS auparavant, mais quand je vide les données dans mon API PHP, c'est juste vide. voilà comment je le tirant de la demande dans le PHP:

parse_str(file_get_contents('php://input'), $put_vars); 
$arr_req_data = $put_vars['values'];  

Dans mon API si le apihash envoyé à partir de la demande ne correspond pas au hachage SHA256 construit sur les valeurs PUT, il échoue.

Cela fonctionne dans JQuery, juste échouer maintenant je suis passé à $ http. Je ne suis pas sûr pourquoi les données PUT semblent être vides.

+1

Avez-vous regardé ce que le navigateur envoie réellement en utilisant devtools de votre navigateur? – Andorbal

+0

Bon point, je ne l'avais pas vérifié mais les données étaient en train d'être envoyées –

Répondre

1

La valeur de retour de file_get_contents('php://input') sera une chaîne JSON (à condition que tout ait été envoyé), donc parse_str n'est pas la bonne fonction pour gérer ces données.
Utilisez plutôt json_decode.

De même, il n'est pas nécessaire d'envoyer des valeurs jsonified, cela compliquera les choses car vous devrez utiliser json_decode deux fois.

+0

Ça a été fait, merci. Je ne sais pas pourquoi jQuery fonctionnait quand AngularJS n'était pas bien. Les méthodes AJAX ont l'air si simialr –

+0

@Skeater Je dirais que vous avez utilisé jQuerys '.serialize' qui fonctionnerait avec' parse_str' car il produit le bon format. – Yoshi

+0

y at-il un moyen d'obtenir '$ http.put' pour ne pas envoyer un objet json, et envoyer l'objet correctement formaté? – Jhecht

Questions connexes