Javascript 回调函数$http请求angularjs
我是angularjs新手,尝试将http请求函数中的数据分配给$scope变量。但是由于异步,这行代码console.log($scope.field\u result\u var)将在请求完成之前执行Javascript 回调函数$http请求angularjs,javascript,angularjs,asynchronous,callback,Javascript,Angularjs,Asynchronous,Callback,我是angularjs新手,尝试将http请求函数中的数据分配给$scope变量。但是由于异步,这行代码console.log($scope.field\u result\u var)将在请求完成之前执行 app.controller('my_control', function($scope, $http) { $scope.field_result_var =''; $scope.check_field_http = function()
app.controller('my_control', function($scope, $http) {
$scope.field_result_var ='';
$scope.check_field_http = function() {
$http({
method: 'GET',
url: 'aaa.php',
params : {field:$scope.field_data}
}).then(function successCallback(response) {
$scope.field_result_var = response.data;
}, function errorCallback(response) {
});
};
$scope.check_field = function() {
$scope.check_field_http ();
//below is code need to execute after get the data like
console.log($scope.field_result_var );
};
});
app.controller('my_control', function($scope, $http) {
$scope.field_result_var ='';
$scope.check_field_http = function() {
$http({
method: 'GET',
url: 'aaa.php',
params : {field:$scope.field_data}
}).then(function successCallback(response) {
myCallbackFunction(response);
}, function errorCallback(response) {
});
};
$scope.check_field = function() {
$scope.check_field_http ();
//below is code need to execute after get the data like
console.log($scope.field_result_var);
};
function myCallbackFunction(response_param) {
$scope.field_result_var = response_param.data;
}
});
我曾尝试根据中的答案使用回调函数,但我可能错误地实现了回调函数,因此console.log($scope.field\u result\u var)仍会在请求完成之前执行
app.controller('my_control', function($scope, $http) {
$scope.field_result_var ='';
$scope.check_field_http = function() {
$http({
method: 'GET',
url: 'aaa.php',
params : {field:$scope.field_data}
}).then(function successCallback(response) {
$scope.field_result_var = response.data;
}, function errorCallback(response) {
});
};
$scope.check_field = function() {
$scope.check_field_http ();
//below is code need to execute after get the data like
console.log($scope.field_result_var );
};
});
app.controller('my_control', function($scope, $http) {
$scope.field_result_var ='';
$scope.check_field_http = function() {
$http({
method: 'GET',
url: 'aaa.php',
params : {field:$scope.field_data}
}).then(function successCallback(response) {
myCallbackFunction(response);
}, function errorCallback(response) {
});
};
$scope.check_field = function() {
$scope.check_field_http ();
//below is code need to execute after get the data like
console.log($scope.field_result_var);
};
function myCallbackFunction(response_param) {
$scope.field_result_var = response_param.data;
}
});
很抱歉,我这里没有什么问题,有些可能是angularjs的一般概念:
1) 为了确保在$http请求成功后执行console.log,我在回调实现中犯了哪些错误
2) 如果我定义了回调函数,比如,如何为我的案例调用它
$scope.myCallbackFunction = function (response_param) {
$scope.field_result_var = response_param.data;
}
3) 两者的区别是什么
$scope.myCallbackFunction = function (response_param) {
$scope.field_result_var = response_param.data;
}
及
在angularjs
(四)
搜索解决方案时,我看到人们在myApp.factory中创建http请求,就像
使用myApp.factory创建函数与使用scope.function\u name=function()创建函数有何不同?在这个问题中,你问了很多问题。让我们从结尾开始,向后看,因为你在底部问了一些高层次的问题 使用myApp.factory创建函数有什么区别 vs使用$scope.function\u name=function()创建函数 在AngularJS中,有一个服务的概念,它是用于封装特定功能的可注入代码块。为了让事情变得更加混乱,有一些特定类型的服务具有自己的语法。您可以使用.factory()、.provider()或.service(),但它们都提供了一个放置业务逻辑的位置,这与您可能在控制器中放置的位置几乎相同(在Angular 2中,它们都整合在“服务”中) 4) 在搜索解决方案时,我看到人们在myApp.factory中创建http请求,比如如何等待响应来自angularjs中的$http请求 主组件(或控制器)的职责应该是保存数据,以便视图能够显示数据。调用http请求不应该出现在您的控制器中,因为这样它会变得很大和臃肿一般的经验法则是:使用提供一个主服务的“助手”服务,尽可能精简控制器。 3) 两者的区别是什么 $scope.myCallbackFunction=函数(响应参数){ $scope.field\u result\u var=响应参数数据; }及 函数myCallbackFunction(响应参数){ $scope.field\u result\u var=响应参数数据; }在angularjs 您在这里要问的概念是,对于AngularJS甚至JavaScript来说,这并不是唯一的概念。匿名函数没有名称。这些在JavaScript开发中非常常见,尤其是异步操作的回调。对于解释代码的计算机来说没有区别,但是匿名函数使用更少的字符、更少的行,并且您不需要到处寻找回调函数<作为一个一般的经验法则:如果您从未真正调用函数的名称,请考虑将其命名为匿名。< /强> 2) 如果我定义了回调函数,比如,如何为我的 案子 $scope.myCallbackFunction=函数(响应参数){ $scope.field\u result\u var=响应参数数据; } 您已将函数定义为名为$scope.myCallbackFunction的变量的值。所以你可以这样做:
$scope.check_field_http = function() {
$http({
method: 'GET',
url: 'aaa.php',
params : {field:$scope.field_data}
}).then(
$scope.myCallbackFunction,
$scope.myCallbackFunction
);
};
现在,回答你最初的问题,“这里的错误是什么?”。似乎console.log语句出现在$scope.check_字段函数中。异步请求在JavaScript中是非阻塞的,因此$scope.check\u field\u http将运行并发送其请求。然后,解释器将继续单步执行代码,在发送请求后立即执行log语句,但不等待响应返回。如果希望console.log语句在请求返回后出现,则应将其移动到名为myCallbackFunction的函数体中。在这个问题中,您要问的问题很多。让我们从结尾开始,向后看,因为你在底部问了一些高层次的问题 使用myApp.factory创建函数有什么区别 vs使用$scope.function\u name=function()创建函数 在AngularJS中,有一个服务的概念,它是用于封装特定功能的可注入代码块。为了让事情变得更加混乱,有一些特定类型的服务具有自己的语法。您可以使用.factory()、.provider()或.service(),但它们都提供了一个放置业务逻辑的位置,这与您可能在控制器中放置的位置几乎相同(在Angular 2中,它们都整合在“服务”中) 4) 在搜索解决方案时,我看到人们在myApp.factory中创建http请求,比如如何等待响应来自angularjs中的$http请求 主组件(或控制器)的职责应该是保存数据,以便视图能够显示数据。调用http请求不应该出现在您的控制器中,因为这样它会变得很大和臃肿一般的经验法则是:使用提供一个主服务的“助手”服务,尽可能精简控制器。 3) 两者的区别是什么 $scope.myCallbackFunction=函数(响应参数){