Проблемы с заполнением списка выбора с помощью angular js и php

Я пытаюсь заполнить список выбора данными из моей базы данных (php и mysql). Я работаю с AngularJs и Angular Material. Так что я не могу показать данные из БД в списке

ситуация с БД:

  • tblProjectType -> имя таблицы
  • 2 rows:
    • id_ProjectType
    • тип_проекта

Любая помощь или указатели были бы замечательными.

Это мой HTML-код:

<form ng-controller="AppCtrl">
      <div layout="row">
        <md-select-label>Project type</md-select-label>

        <md-select ng-model="project_type" name="project_type" placeholder="Choose a project type" id="containerProjectType">
          <md-option ng-repeat="projecttype in projecttypes" value="{{projecttype.id_ProjectType}}">{{projecttype.project_type}}</md-option>
        </md-select>

      </div>
</form>

Код моего app.js:

    var app = angular.module("DragDrop", ['ngMaterial']);
    app.controller('AppCtrl', function($scope, $mdDialog, $http) {

    $scope.projectTypeInfo = [];

    var getProjectTypeFunction = function(succesFn, errorFn)
    {
        $http.get('db.php?action=get_ProjectType_info')// call to the server
        .succesFn(function(data){
            succesFn(data); //call the function passed into getProjectTypeFunction with the data from the server
            console.log('Retrieved data from server');
        })
        .error(errorFn || function() {
            console.log("Error in retrieving data from server");
        })

    }

    this.reloadProjectTypeList = function() 
    {
         getProjectTypeFunction(       
          /* success function */ 
          function(data) { 
              //debugger; 
              $scope.projectTypeInfo = data; 
              //digest recycle
              //if (!$scope.$$phase) { $scope.$apply(); }
          }, 
          /* error function */ 
          function() 
          { 
              alert("Server load failed"); 
          }) 
    };

Мой php-код:

<?php 
include('config.php');

//echo ('test' . $_GET['action']);
switch($_GET['action'])  {
    case 'get_ProjectType_info' :
        get_ProjectType_info(); 
        break;

}

/**  Function to data from tblProjectType **/
function get_ProjectType_info(){
    $qry = mysql_query('SELECT * from tblProjectType');

    echo("test");
    //echo(qry);

    $data = array();
    while($rows = mysql_fetch_array($qry))
    {
        $data[] = array(
                    "id_ProjectType"    => $rows['id_ProjectType'],
                    "project_type"      => $rows['project_type']
                    );
    }

    print_r(json_encode($data));
    return json_encode($data);
}

?>

person GY22    schedule 01.07.2015    source источник
comment
Я думаю, вы должны задать конкретный вопрос или любой вопрос. Я не вижу вопросительного знака.   -  person ficuscr    schedule 01.07.2015
comment
Вы успешно возвращаете данные?   -  person Ronnie    schedule 01.07.2015
comment
@ Ронни, нет, это даже не будет console.log, чтобы увидеть, подключаюсь ли я к базе данных   -  person GY22    schedule 01.07.2015
comment
поэтому, чтобы вызвать ваш PHP, похоже, что нужно вызвать reloadProjectTypeList , который вызывает getProjectTypeFunction . Я не вижу, чтобы его где-нибудь вызывали. Я вижу здесь некоторую избыточность. Возможно, вы захотите переосмыслить, как вы вызываете файл PHP.   -  person Ronnie    schedule 01.07.2015
comment
другое дело, в вашем PHP у вас есть console.log("test");, который не является функцией PHP, это функция JS   -  person Ronnie    schedule 01.07.2015
comment
@ Ронни, ты прав. я не совсем уверен, как установить соединение с моим угловым с php (все еще новичок в этом). Это похоже на то, что я сделал это во второй раз... поэтому код в моем app.js повсюду. любые мысли о том, как лучше действовать   -  person GY22    schedule 01.07.2015
comment
@ GY22 get_ProjectType_info просто возвращает данные, и вы больше ничего не делаете. Вы должны echo вывести все, что было возвращено функцией, чтобы ее можно было передать в AngularJS.   -  person Avalanche    schedule 01.07.2015
comment
ya @Avalanche прав, на самом деле ничего не повторяется. print_r будет выводить теги ‹pre›, которые, как я полагаю, не будут действительными JSON в этот момент   -  person Ronnie    schedule 01.07.2015
comment
@ GY22 Всего несколько дней назад был вопрос, похожий на этот. Вы можете взглянуть на новые идеи stackoverflow.com/a/31099736/1125161   -  person Avalanche    schedule 01.07.2015


Ответы (1)


Итак, для начала давайте почистим ваш JS. Мы можем сократить то, что у вас есть, к этому:

var app = angular.module("DragDrop", ['ngMaterial']);

app.controller('AppCtrl', function($scope, $mdDialog, $http)
{
  $scope.projectTypeInfo = [];

  $scope.getProjectTypeFunction = function()
  {
    $http.get('db.php?action=get_ProjectType_info')
      .success(function(data, status, headers, config)
      {
        $scope.projectTypeInfo = data;
        console.log('Retrieved data from server');
        console.log(data);
      })
      .error(function(data, status, headers, config)
      {
        console.log("Error in retrieving data from server");
        console.log(data,status);
      });
  };

  $scope.getProjectTypeFunction(); //-- call the function that invokes $http.get()
};

В PHP ваша функция должна отображать данные через echo json_encode($data);, а не возвращать их (как указано @Avalanche).

Теперь ваша консоль должна что-то выводить, но вам нужно удалить console.log("test"); из вашего PHP, так как это наверняка вызовет ошибку.

изменить

В настоящее время ваш повтор гласит:

<md-option ng-repeat="projecttype in projecttypes" value="{{projecttype.id_ProjectType}}">{{projecttype.project_type}}</md-option>

Мы сохранили ваши данные в $scope.projectTypeInfo, поэтому их необходимо изменить на:

<md-option ng-repeat="projecttype in projectTypeInfo" ng-value="projecttype.id_ProjectType">{{projecttype.project_type}}</md-option>
person Ronnie    schedule 01.07.2015
comment
хорошо, я получаю вывод не в моем журнале консоли. (удалил console.log в php) и прокомментировал возврат son_encode. но теперь я получил ошибку в своей консоли -› gyazo.com/c9d88469877e038789675836cf16555d. - person GY22; 01.07.2015
comment
извините, это опечатка, succes должно быть success - person Ronnie; 01.07.2015
comment
список сейчас пополняется? - person Ronnie; 01.07.2015
comment
удалить echo("test"); из вашего php - person Ronnie; 01.07.2015
comment
удалил его, но все равно ничего. вероятно, стоит упомянуть, что форма находится во всплывающем окне (md-dialg -> материал angular) - person GY22; 01.07.2015
comment
вам нужно исправить ваш HTML. я изменю свой пост - person Ronnie; 01.07.2015
comment
Кроме того, я не знаком с угловыми материалами, но похоже, что value следует ng-value отредактировать, чтобы удалить {{}} из ng-значения. Глядя больше на документы, похоже, что он может работать со значением и значением ng - person Ronnie; 01.07.2015
comment
есть изменение -› gyazo.com/8c6321336a98ff7249442bfa2e3d12fb. я должен был сделать в трассировке ng-repeat по $index или я получил ошибку - person GY22; 01.07.2015
comment
Давайте продолжим обсуждение в чате. - person Ronnie; 01.07.2015