2013-07-12 7 views
15

voglio cambiare post [ 'Content-Type'] in angularjs così io usocome cambiare post [ 'Content-Type'] in angularjs

app.config(function($locationProvider,$httpProvider) { 
$locationProvider.html5Mode(false); 
$httpProvider.defaults.useXDomain = true; 
delete $httpProvider.defaults.headers.common['X-Requested-With']; 
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;  charset=UTF-8'; 
}); 

e l'evento è

 $http.post("http://172.22.71.107:8888/ajax/login",{admin_name:user.u_name,admin_password:user.cert}) 
     .success(function(arg_result){ 

      console.log(arg_result); 


     }); 
}; 

tuttavia la rusult è

Parametersapplication/x-www-form-urlencoded 
{"admin_name":"dd"} 

quello che voglio è

Parametersapplication/x-www-form-urlencoded 
admin_name dd 

quindi cosa dovrei fare?

risposta

-3

Date un'occhiata a questo: How can I post data as form data instead of a request payload?

alternativa, è possibile effettuare le seguenti operazioni:

$http.post('file.php',{ 
     'val': val 
    }).success(function(data){ 
      console.log(data); 
     }); 

PHP

$post = json_decode(file_get_contents('php://input')); 
$val = print_r($post->val,true); 
+0

questa soluzione non funziona –

+0

Sì, sì. Fornisci il tuo problema come un violino o plunkr e avrò uno sguardo – Sprottenwels

+0

Questa è una soluzione incompleta, se si desidera specificare un diverso tipo di contenuto oltre a quello predefinito, è necessario dichiararlo all'interno del servizio http. Non sto dicendo che la tua soluzione non funziona o funziona, ma non è quello che è stato chiesto. – TGarrett

28

Prova come:

var serializedData = $.param({admin_name:user.u_name,admin_password:user.cert}); 

$http({ 
    method: 'POST', 
    url: 'http://172.22.71.107:8888/ajax/login', 
    data: serializedData, 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
    }}).then(function(result) { 
      console.log(result); 
     }, function(error) { 
      console.log(error); 
     }); 
+0

grazie mille! Funziona bene! Ma non ho la funzione di "$ .param" – XzAngular

+0

'$ .param' è una funzione jQuery per serializzare i dati del modulo in una stringa. http://api.jquery.com/jQuery.param/. È necessario serializzare il tuo JSON in questo modo quando usi 'application/x-www-form-urlencoded' – finishingmove

+1

@XzAngular, puoi usare * JSON.stringify (requestObject) * invece di * $. Param *. Non richiede jQuery. – pubsy

4
angular.module('myApp', []) 
     .config(function ($httpProvider) { 
      $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded'; 
      $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 
     }) 
1

OP sta usando Content-Type : application/x-www-form-urlencoded quindi è necessario utilizzare $httpParamSerializerJQLike per modificare dati post da JSON a stringa

nota: non ci sono dati proprietà, ma è params proprietà

$http({ 
      method: 'POST', 
      url: 'whatever URL', 
      params: credentials, 
      paramSerializer: '$httpParamSerializerJQLike', 
      headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
     }) 

Inoltre, è possibile iniettare il serializzatore e utilizzarlo esplicitamente con dati proprietà

.controller(function($http, $httpParamSerializerJQLike) { 
.... 
$http({ 
     url: myUrl, 
     method: 'POST', 
     data: $httpParamSerializerJQLike(myData), 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded' 
     } 
    }); 
Problemi correlati