2012-08-27 28 views
5

deseo serializar los datos del formulario en angularjs. Lo que sigue es el código del controlador:angularjs serialize form data

function SearchCtrl($scope, $element, $http) { 
     $scope.url = 'php/search.php'; 
     $scope.submit = function() { 
      var elem = angular.element($element); 
      //var dt = $(elem.parent()).serialize(); 
      console.log($(elem.parent()).serialize()); 
      $http({ 
       method: 'POST', 
       url: $scope.url, 
       data: 'first=hgf&last=ghfgh', 
       headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
      }).success(function(data, status) { 
       $scope.status = status; 
       $scope.data = data; 
       $scope.result = data; // Show result from server in our <pre></pre> element 
       //var elem = angular.element(e.srcElement); 
       //alert($(elem.parent()).serialize()); 
      }).error(function(data, status) { 
       $scope.data = data || "Request failed"; 
       $scope.status = status; 
      }); 
      return false; 
     }; 
} 

editado:

<!DOCTYPE html> 
<html ng-app> 
<head> 
<title>Search form with AngualrJS</title> 
     <script src="../angular-1.0.1.min.js"></script> 
     <script src="http://code.jquery.com/jquery.min.js"></script> 
     <script src="js/search.js"></script> 



</head> 
<body> 
     <div> 
     <form ng-controller="SearchCtrl" ng-submit="submit()"> 
      <label>Search:</label> 
      <input type="text" ng-model="keywords" placeholder="enter name..."> 
      <input type="text" ng-model="desc" placeholder="enter description..."> 
      <button type="submit">Search</button> 
      <p>Try for example: "php" or "angularjs" or "asdfg"</p> 
     </form> 
<pre ng-model="result"> 
{{result}} 
</pre> 
    </div> 
</body> 

</html> 

pero nada se imprime en la consola. ¿Dónde me estoy equivocando?

+0

editar el contenido para incluir html. – z22

+0

Me pregunto por qué se usa '$ (elem.parent()). Serialize())' en lugar de solo '$ (elem) .serialize()'. ¿No es el elemento $ aquí un '

' uno? – raina77ow

+0

intenté con $ (elem) .serialize(), todavía no hay ningún resultado! ¿Qué shpuld hago? – z22

Respuesta

8

Desde el doc:

Para el valor de un elemento de formulario que debe incluirse en la cadena serializada, el elemento debe tener un atributo de nombre.

En sus entradas HTML no tienen nombres, por lo tanto serialize devuelve una cadena vacía. Solucionar este con algo como ...

<input type="text" name="keywords" ng-model="keywords" placeholder="enter name..."> 
<input type="text" name="desc" ng-model="desc" placeholder="enter description..."> 

Y, por cierto, que no tiene que envolver angular $element en función de jQuery: $element.serialize() funcionaría bien.

Demo.

+0

$ element.serialize() no funciona solo, me da Objeto [[objeto HTMLFormElement]] no tiene ningún error de método 'serializar' en la consola de Chrome – z22

Cuestiones relacionadas