2

resulta que hago esta peticion en el controllers a mi php:

  $http({
  method: 'POST',
  url: 'http://localhost/nPanelarencion/app/php/consulta.php',
  headers: {
      'Content-Type': 'application/json', 
      'Accept': 'application/json' 
  },

})

la cual en consola me muestra sus datos de la siguiente manera

datos

Esos mismos datos necesito guardarlos en $scope para poder usarlos en html...

Controller code:

 app.controller('search', function($timeout, $scope, $http) {

//     comienza la  conexion

getInfo();

function getInfo(){

  $http({
      method: 'POST',
      url: 'http://localhost/nPanelarencion/app/php/consulta.php',
      headers: {
          'Content-Type': 'application/json', /*or whatever type is relevant */
          'Accept': 'application/json' /* ditto */
      },
      data: {
       /* You probably need to send some data if you plan to log in */
   }
  })

.success(function(data){

    console.log(data);
    localStorage.setItem("Tickets", angular.fromJson(data));


//NEXT>

       $scope.loadUsers = function() {
         return $timeout(function() {
           $scope.tickets = localStorage.getItem('Tickets');

         }, 650);
       };
})};
conection.php:

<?php
// Connecting to database as mysqli_connect("hostname", "username", "password", "database name");
$con = mysqli_connect("localhost", "root", "", "saltala");
?>

consulta.php:

<?php

// Including database connections
require_once 'conection.php';
// mysqli query to fetch all data from database
$query = "SELECT rut, numero, servicio_id FROM Tickets";
$result = mysqli_query($con, $query);
$arr = array();
if(mysqli_num_rows($result) != 0) {

while($row = mysqli_fetch_assoc($result)) {
$arr[] = $row;
 }
}
// Return json array containing data from the databasecon
echo $json_info = json_encode($arr);
?>

PREGUNTO: ¿Como lo hago? he intentado parsearlo y todo pero aún no me sale.

necesito mostrar los rut en un select

      <md-select placeholder="Assign to user" ng-model="buscar" md-on-open="loadUsers()" style="min-width: 200px;">
    <md-option ng-value="user" ng-repeat="tick in tickets | filter : buscar" >{{tick.rut}}</md-option>
  </md-select>
Hernan Humaña
  • 683
  • 2
  • 16
  • 31

2 Answers2

4

Tu problema no tiene que ver con AngularJS. Las funcioneslocalStorage.getItem y localStorage.setItem manipulan cadenas de caracteres

Un DOMString que contiene el valor de la clave. Si la clave no existe, devuelve null.

Lo que debes hacer es

$scope.loadUsers = function() {
     return $timeout(function() {

         $scope.tickets = JSON.parse(localStorage.getItem('Tickets'));
         ....

para convertir la cadena de nuevo a objeto y

.success(function(data){

    localStorage.setItem("Tickets", JSON.stringify(data));
    ......

al guardar dichos valores.

Lee ¿Cómo puedo convertir un string JSON a un objeto en JavaScript?

devconcept
  • 12,541
  • 3
  • 39
  • 56
  • lanza este error : angular.js:13920 ReferenceError: data is not defined – Hernan Humaña Oct 20 '16 at 20:33
  • Debes escribir eso en el success de tu llamada a tu archivo.php – sioesi Oct 20 '16 at 20:36
  • Tienes razón @sioesi. De hecho debería cambiar el `success` por `then` ya que este es obsoleto. – devconcept Oct 20 '16 at 20:41
  • Claro!, se ha visto harto que success ya esta obsoleto! @devconcept – sioesi Oct 20 '16 at 20:42
  • @devconcept puedes echar un ojo a mi respuesta? Creo que tambien es una opcion valida! tengo dudas sobre cuando recibo un JSON, volver a parsearlo – sioesi Oct 20 '16 at 20:50
  • 1
    @sioesi El objeto recibido en data puede renderizarse y recorrerse ya que es de hecho un objeto válido (siempre y cuando use `json_encode` en el servidor lo cual ya está haciendo) pero no hay necesidad de recorrerlo ya que esa tarea la hace automáticamente `ng-repeat` en la vista – devconcept Oct 20 '16 at 20:59
1

Solucione el problema anterior, ahora que tengo los datos, los quiero guardar en LocalStorage pero me sobreescríbe los datos, dejándome sólo uno...

Cómo guardo los datos? en el controlador, quedando así:

    $http({
    method: 'POST',
    url: 'http://localhost/nPanelarencion/app/php/consulta.php',
    headers: {
        'Content-Type': 'application/json',
        'Accept': 'application/json'
    }
})

  .then(function(data) {
     var dat = data.data;

     for (var i = 0; i < dat.length; i++) {
       dat[i]
      var runum = dat[i].rut +","+ dat[i].numero
      console.log("show: ",runum);
      localStorage.setItem("rutnum",runum);
     }
  });

y console.log(runum) ahora muestra esto:

introducir la descripción de la imagen aquí

Ahora, Como recibo los datos?, bueno en otro controlador, en la funcion siguiente:

      function loadAll() {
    var rut = localStorage.getItem("rutnum").split(",")[0];
    console.log("el rut es: ",JSON.stringify(rut));


    var num = localStorage.getItem("rutnum").split(",")[1];
    console.log("El numero es: ",parseInt(num));
    var finalnum = parseInt(num)

    var repos = [
      {
        'rut'      : rut,
        'numero'   : finalnum

      }

    ];
    return repos.map( function (repo) {
      repo.value = repo.rut.toLowerCase();
      return repo;
    });
  }

y como dije anteriormente el resultado es que solo me muestra un solo rut y un solo numero, entiendo que sobre escribe el anterior, como hago para guardar todos los rut?

Esta es la imagen del LocalStorage y lo que me muestra:

introducir la descripción de la imagen aquí

EDIT SIOESI

El error esta en la siguiente linea :

 for (var i = 0; i < dat.length; i++) {
      var runum = dat[i].rut +","+ dat[i].numero
      console.log("show: ",runum);
      localStorage.setItem("rutnum",runum);
 }

Tu estas recorriendo tu arreglo y guardando 1 por 1 EL MISMO NOMBRE DE LA KEY DE TU LOCALSTORAGE.. por eso siempre queda el ultimo Debes hacer algo asi

var tickets = [];
for (var i = 0; i < dat.length; i++) {
    var ticket = {id : dat[i].id, rut : dat[i].rut};
    tickets.push(ticket);
}
localStorage.setItem("Tickets",tickets);

Entonces, creas un tipo de objeto del arreglo que tiene id y rut, lo agregas en el arreglo tickets y luego guardar en localStorage el arreglo Tickets.. Ese arreglo tickets lo llamas desde tu controlador

$scope.tickets = localStorage.getItem('Tickets');

Y ahora puedes recorrerlos

<div ng-repeat="ticket in tickets">
    {{ticket.rut}}
</div>
sioesi
  • 11,365
  • 5
  • 20
  • 55