Soy nuevo en AngularJS y, para empezar, pensé en desarrollar una nueva aplicación utilizando solo AngularJS.
Estoy tratando de hacer una llamada AJAX al lado del servidor, usando $http
desde mi aplicación angular.
Para enviar los parámetros, probé lo siguiente:
$http({
method: "post",
url: URL,
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
data: $.param({username: $scope.userName, password: $scope.password})
}).success(function(result){
console.log(result);
});
Esto está funcionando, pero también está usando jQuery en $.param
. Para eliminar la dependencia de jQuery, probé:
data: {username: $scope.userName, password: $scope.password}
pero esto pareció fallar. Entonces intenté params
:
params: {username: $scope.userName, password: $scope.password}
pero esto también pareció fallar. Entonces intenté JSON.stringify
:
data: JSON.stringify({username: $scope.userName, password: $scope.password})
Encontré estas posibles respuestas a mi búsqueda, pero no tuve éxito. ¿Estoy haciendo algo mal? Estoy seguro de que AngularJS proporcionaría esta funcionalidad, pero ¿cómo?
javascript
jquery
angularjs
ajax
angularjs-http
Veer Shrivastav
fuente
fuente
$http({method: 'post', url: URL, data: {username: $scope.userName, password: $scope.password}});
$scope.userName
definido? ¿Por qué no lo intentastedata: data
?Respuestas:
Creo que lo que debe hacer es transformar sus datos del objeto no en una cadena JSON, sino en url params.
Del blog de Ben Nadel .
Ejemplo de aquí .
ACTUALIZAR
Para usar los nuevos servicios agregados con AngularJS V1.4, vea
fuente
angular.element
, puede simplementereturn angular.element.param(obj);
var obj = {a: 1, b: 2}; Object.keys(obj).reduce(function(p, c) { return p.concat([encodeURIComponent(c) + "=" + encodeURIComponent(obj[c])]); }, []).join('&');
Variables de codificación de URL utilizando solo servicios AngularJS
Con AngularJS 1.4 y versiones posteriores, dos servicios pueden manejar el proceso de codificación de datos url para solicitudes POST, eliminando la necesidad de manipular los datos con
transformRequest
o usando dependencias externas como jQuery:$httpParamSerializerJQLike
- un serializador inspirado en jQuery's.param()
( recomendado )$httpParamSerializer
- un serializador utilizado por Angular para solicitudes GETEjemplo de uso
Vea una demostración más detallada de Plunker
Como son
$httpParamSerializerJQLike
y$httpParamSerializer
diferentesEn general, parece que
$httpParamSerializer
utiliza un formato de codificación de URL menos "tradicional" que$httpParamSerializerJQLike
cuando se trata de estructuras de datos complejas.Por ejemplo (ignorando el porcentaje de codificación de paréntesis):
• Codificar una matriz
• Codificar un objeto
fuente
$http.({...
lugar de`$http.post({...
Todo esto parece excesivo (o no funciona) ... solo haz esto:
fuente
El problema es el formato de cadena JSON. Puede usar una cadena URL simple en los datos:
fuente
encodeURIComponent($scope.userName)
para codificar los datos de la URL o sus parámetros se corromperán si el usuario ingresa un valor como"&myCustomParam=1"
Esta es la forma en que debería ser (y, por favor, no haya cambios en el backend ... ciertamente no ... si su stack frontal no es compatible
application/x-www-form-urlencoded
, tírelo ... ¡con suerte AngularJS sí lo hace!Funciona como un encanto con AngularJS 1.5
Gente, déjenles un consejo:
use promesas
.then(success, error)
al tratar$http
, olvídese.sucess
y.error
devoluciones de llamada (ya que están en desuso)Desde el sitio angularjs aquí " Ya no puede usar la cadena JSON_CALLBACK como marcador de posición para especificar dónde debe ir el valor del parámetro de devolución de llamada " .
Si su modelo de datos es más complejo que solo un nombre de usuario y una contraseña, aún puede hacerlo (como se sugirió anteriormente)
El documento para el
encodeURIComponent
se puede encontrar aquífuente
Si es un formulario, intente cambiar el encabezado a:
y si no es un formulario y un json simple, intente este encabezado:
fuente
$_POST
matriz en blanco .fuente
Desde los documentos $ http esto debería funcionar ...
fuente
headers
no afectaría a ladata
que aún deberá ser codificada de una manera u otra.necesita publicar un objeto javascript simple, nada más
si tiene php como back-end, entonces tendrá que hacer algunas modificaciones más ... consulte este enlace para arreglar el lado del servidor php
fuente
Aunque fue una respuesta tardía, encontré que UrlSearchParams angular funcionó muy bien para mí, también se encarga de la codificación de parámetros.
fuente
Esto funcionó para mí. Uso angular para front-end y laravel php para back-end. En mi proyecto, la web angular envía datos json a laravel back-end.
Este es mi controlador angular.
Este es mi controlador laravel de back-end php.
Esta es mi ruta laravel
El resultado en el navegador es
Hay una extensión de cromo llamada cartero. Puede usar para probar su URL de back-end si funciona o no. https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en
con suerte, mi respuesta te ayudará.
fuente