回调函数$http请求angularjs



我是angularjs的新手,正在尝试将http请求函数中的数据分配给$scope变量。但是由于异步,这行代码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) {
$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  );     
};

});

我曾尝试使用基于AngularJS http返回值中答案的回调函数,但我可能错误地实现了回调函数,因此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) 为了确保console.log在$http请求成功后执行,我在回调实现中犯了哪些错误?

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; 
}

function myCallbackFunction(response_param) {
$scope.field_result_var  = response_param.data; 
}

穿着angularjs?

4)在搜索解决方案时,我看到人们在myApp.factory中创建http请求,比如如何在angularjs中等待$http请求的响应?

使用myApp.factory创建函数与使用$scope.function_name=function()创建函数有什么区别

你问了很多问题,所有这些都在这个问题中。让我们从最后开始,向后看,因为你在底部问了高级别的问题。

用myApp.factory创建函数有什么区别vs使用$scope.function_name=function()创建函数

在AngularJS中,存在服务的概念,这些服务是用于封装某些功能的可注入代码块。更令人困惑的是,有一些特定类型的服务具有自己的语法。您可以使用.factory()、.provider()、.service(),但它们几乎都提供了相同的目的,即将业务逻辑放在控制器中(在Angular 2中,它们都合并为"服务")。

4)在搜索解决方案时,我看到人们在myApp.factory中创建http请求,比如angularjs中的$http请求如何等待响应?

您的主要组件(或控制器)的责任应该是保存数据,以便视图可以显示它。调用http请求不应该在控制器中,因为这样它就会变得庞大和臃肿根据一般经验:使用提供一个主服务的"助手"服务,使控制器尽可能薄

3)之间有什么区别

$scope.myCallbackFunction=函数(response_param){$scope.field_result_var=响应_图表.data;}和

函数myCallbackFunction(response_param){$scope.field_result_var=响应_图表.data;}穿着angularjs?

您在这里询问的概念是匿名函数,这些函数对于AngularJS甚至JavaScript来说都不是唯一的。匿名函数没有名称。这些在JavaScript开发中非常常见,尤其是对于异步操作的回调。对于解释代码的计算机来说没有什么区别,但匿名函数使用的字符更少,行更少,而且你不需要四处寻找回调函数根据一般经验:如果您从未真正按名称调用函数,请考虑使其匿名

2)如果我定义了回调函数案例

$scope.myCallbackFunction=函数(response_param){$scope.field_result_var=响应_图表.data;}

您已经将函数定义为名为$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_field函数内部。异步请求在JavaScript中是非阻塞的,因此$scope.check_field_http将运行并发送其请求。然后,解释器将继续遍历代码,在发送请求后立即执行日志语句,但不等待返回响应。如果希望console.log语句在请求返回后出现,则应将其移动到名为myCallbackFunction的函数体中。

也许你应该在http请求中使用.success而不是.then,你也可以使用.error来处理http请求中的错误

像这个

$http({ url: url, method: method, }).success(function (data, status, headers, config) { //your success logic here }) .error(function (data, status, headers, config) { //your error logic here }) .finally(function () { //your finally logic here (optional) });

最新更新