我想構建一個機制,通過POST請求訪問數據庫。到目前爲止,我確實收到了所需的數據,但我在時間上遇到了問題。以下是我正在使用的三段代碼(簡化以保持問題的重點)。角度使僞同步HTTP請求
首先,工廠處理HTTP請求面對面的人一個servlet:
var My_Web = angular.module('My_Web');
My_Web.factory('DB_Services', function($http , $q) {
var l_Result ;
var DB_Services = function(p_Query) {
var deferred = $q.defer();
var url = "http://localhost:8080/demo/servlets/servlet/Test_ui?";
var params = "data=" + p_Query ;
var Sending = url + params ;
$http.post(Sending).
success(function(data, status, headers, config) {
deferred.resolve(data);
}).
error(function(data, status, headers, config) {
deferred.reject(status);
});
return deferred.promise;
}
return DB_Services;
});
其次,通用函數處理promise
(或所以我的意思)暴露於會需要的所有控制器
$scope.Search_Lookups = function() {
console.log ("search for lookup data...") ;
var l_Lookup_Type = document.getElementById("THISONE").value ;
var l_Send_Request_Data = '{"Requestor_ID":"4321" , "Request_Details" : { "Data_type" : "' + l_Lookup_Type + '" } }' ;
console.log("Sending Request: " + l_Send_Request_Data) ;
l_Data = $rootScope.Get_Data_from_DB(p_Query) ;
console.log ("Received response: " + l_Data) ;
Deploy_data(l_Data) ;
}
0:控制器之一內
$rootScope.Get_Data_from_DB = function(p_Query) {
DB_Services(p_Query).then(function(d) {
console.log("In Get_Data_from_DB; Received data is: " + JSON.stringify(d));
$scope.data = d;
});
};
第三,一個例子:提取從遠程DB數據
功能Deploy_data(l_Data)
負責分解接收到的數據並將相關的部分放在屏幕上。
會發生什麼事情,我在控制檯上得到字符串Received response: undefined
和檢索結果後立即作爲In Get_Data_from_DB; Received data is: (here I get the data)
。
Received response: undefined
是從調用函數(第三段代碼)打印的,而帶有實際數據的輸出是從上面的第二段代碼中接收和打印的。這意味着對Deploy_data
的調用將不會收到提取的數據。
再一次,相同的機制(即工廠$ rootScope.Get_Data_from_DB)將被許多控制器廣泛使用。
我想過使用$scope.$watch
,但我不確定,因爲同一用戶可能同時觸發多個查詢(例如,請求一個可能需要幾秒鐘才能到達的報告,同時請求其他內容)。
任何建議將不勝感激。
因此你需要級聯調用?這些通話是否相互依賴? – Radu
對不起,但我不確定我瞭解你的問題。調用序列爲:(從控制器內)Search_Lookups - > $ rootScope.Get_Data_from_DB - > DB_Services。這是你問的嗎? – FDavidov
忘記了你的名字@Radu。對不起,但我不確定我瞭解你的問題。調用序列爲:(從控制器內)Search_Lookups - > $ rootScope.Get_Data_from_DB - > DB_Services。這是你問的嗎? – FDavidov