未定义的属性:stdClass:使用AngularJS + PHP

时间:2017-06-16 04:45:02

标签: javascript php angularjs

我正试图从provCode ID获取provinceDatagetFunction()。我使用angular.forEach()做到了这一点,但我没想到会出现以下错误。


注意:未定义的属性: C:\ xampp \ htdocs \ student-violation-system \ php \ address \ cities.php 中的stdClass :: $ provCode 5
[]

我尝试将{provCode: provCode}更改为仅provCode也无效。

所以,我尝试将{provCode: provCode}更改为{provCode: '0456'}并且它有效。

但是当然这不是我想要的,我希望它是动态的。我想知道为什么它会说Undefined property,因为我试图在console.logprovCode getCity(),它的预期值为0456。所以,我想知道它为什么会说Undefined property

app.factory

factory.getProvince = function(){
    return $http.get('php/address/province.php').then(function(response){
        provinceData = response.data;
        console.log(provinceData); 

        angular.forEach(provinceData, function(value, key) {
            if(value.provDesc == province){
                provCode =  provinceData[key].provCode;
            }   
        }); // angular.forEach

        return provinceData;
    })
}

factory.getCity = function(){
    return $http.post('php/address/cities.php', {provCode: provCode}).then(function(response){

        console.log(provCode);

        municipalityData = response.data;
        console.log(municipalityData);  
        return municipalityData;
    })
}


return factory;

cities.php

<?php 
include("../../connection.php");

$data = json_decode(file_get_contents("php://input"));
$provCode = $data->provCode;

$db->query('SET CHARACTER SET utf8');
$cities = $db->query(" SELECT * FROM refcitymun WHERE provCode='$provCode' ");

$cities = $cities->fetchAll();

echo json_encode($cities);
?>

更新

我在 cities.php 中记录$data,并且返回null值。我不知道为什么,因为我在console.log函数中provCode getCity并且它返回了我期望的正确值/数据。有人可以向我解释发生了什么吗?我的思绪在这个问题上发疯了。

顺便说一句,这是我在如何解决我的问题上的持续方法之一:Anglularjs passing value from Controller, State Resolve and Factory Service

1 个答案:

答案 0 :(得分:0)

您似乎将provCode定义为全局变量。首先尝试将其声明为工厂的私有变量。

实施例

function MyFactory($http) {
  let provCode = 0;
  return {
    getProvince: function () {
      return $http.get('php/address/province.php')
        .then(function(response){
          // do some stuff
          angular.forEach(provinceData, function(value, key) {
            if(value.provDesc == province){
              provCode =  provinceData[key].provCode;
            }   
          }); // angular.forEach
        })
    },
    getCity: function() {
      return $http.post('php/address/cities.php', {provCode: provCode})
        .then(function(response){
          // do some stuff
        })
    }
  };
}
angular
  .module('app')
  .factory('MyFactory', MyFactory);