Javascript 调用工厂函数会触发错误

Javascript 调用工厂函数会触发错误,javascript,angularjs,Javascript,Angularjs,我有一个角度应用程序,其中DB访问通过工厂中的单个函数进行管理。工厂声明如下: var MayApp = angular.module('MayApp'); MayApp.factory("DB_Services", [ "$http" , function($http) { var This_Factory = {} ; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

我有一个角度应用程序,其中DB访问通过工厂中的单个函数进行管理。工厂声明如下:

var MayApp = angular.module('MayApp'); 

MayApp.factory("DB_Services", [ "$http" , function($http) {

    var This_Factory = {} ;

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    This_Factory.Get_Data_from_DB_Internal = function (p_Request) {

        var http    = new XMLHttpRequest()  ;
        var url     = MyURL                 ;
        var params  = "data=" + p_Request   ;
        http.open("POST", url, true);

        //Send the proper header information along with the request
        http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

        http.onreadystatechange = function() {
            if(http.readyState == 4 && http.status == 200) {
                return http.responseText ;
            }
        }
        http.send(params);    
    }    

    // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

    This_Factory.Get_Data_from_DB = function Get_Data_from_DB($scope, DB_Services) {
        var myDataPromise = DB_Services.Get_Data_from_DB_Internal("Dummy");
        myDataPromise.then(function(result) {
            return result ;
        });
    }
    return This_Factory ;
}]);
使用此服务的控制器如下所示:

MayApp.controller('MyController' , ['$scope' , 'DB_Services' , function( $scope , DB_Services) {

    $scope.Search_Lookups = function () {

        var l_Lookup_Type = document.getElementById("Lookup_Seed").value ;

        var l_Data = MyApp.DB_Services.Get_Data_from_DB(l_Lookup_Type);

        console.log ("Received response: " + l_Data) ;

        return l_Data ;

    }

} ]) ;
单击按钮时会调用功能
Search\u Lookups
。生成的错误消息是:
TypeError:无法读取未定义的属性“Get\u Data\u from\u DB”

我与该工厂发生了冲突,并通过在index.html文件中更改其包含位置(即
)解决了问题。现在,我在加载页面时没有收到任何错误,但是控制器仍然看不到
get\u Data\u from\u DB

有线索知道原因吗


谢谢。

您已将工厂注入控制器,名称为
DB\u Services
。当您想调用它时,您只需使用
DB_Services
,而不是
MayApp.DB_Services
,工厂不是应用程序的一种方法,它是控制器中的一个独立变量,您在注入它时定义了它


另外,在处理请求的方式上,我认为这是行不通的,您应该将承诺从工厂传回,而不是在承诺得到解决后检索到的值,因为您的控制器在调用工厂函数后立即将
l_data
分配给undefined,并且不会等待工厂的承诺得到解决。

你自己做XMLHttpRequest有什么原因吗?嘿@SinaGh!!!你对第一点的建议奏效了。至于第二个。。。研究。。。。谢谢你的快速解决办法。@FDavidov很高兴你把我的建议放在心上:)亲爱的@SinaGh,在过去的几天里,我知道你的话应该被认真对待,尽管我缺乏很多知识,但我学得很快!:-)。顺便说一句,我也解决了第二点,所以现在我可以很好地访问数据库了。