如何使用AngularJS做XMLHttpRequest(AJAX)
我试图在POST请求中使用AngularJS
,但在事件中我不能使用$scope
。如何使用AngularJS做XMLHttpRequest(AJAX)
那是我的代码(用于演示目的,我只是折角结构中添加状态):
myApp.controller('myController', function myController($scope) { $scope.myVal = [{status:"before (working)"}];
doRequest(p1, p2, myCallback.bind(null, $scope));
function myCallback($scope, a) {
$scope.myVal = [{ status: a }];
}
function doRequest(p1, p2, callback) {
$scope.myVal = [{ status: "prepare request (working)" }];
var xhr = new XMLHttpRequest();
var url = "http://...";
xhr.open("POST", url, true);
//....
xhr.send(myQuery);
$scope.myVal = [{ status: "after post send (working)" }];
callback("after post via callback (working)");
//callback working till this point
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
callback("in event (NOT working)");
//This is NOT working anymore (even this point is reached)!
}
};
}
通过注释在代码中添加,回调的工作,直到事件处理程序分配。
我在找的是:如何使用回调(或更精确的如何使$scope
可用/传输的事件处理函数)?
回答:
您不需要将$scope
转换为callback
,原因$scope
定义在控制器范围内。
您在使用“原生”Ajax时可能会遇到问题,导致此操作在Angular
之外并且角度不知道,因此您需要熟悉Angular与$scope.$apply
。
如果您需要制作快捷方式,Angular会为您提供$http
服务。
您可以更换整个XMLHttpRequest
与注射$ http和调用.post
方法:
myApp.controller('myController', function myController($scope, $http) { $scope.myVal = [{status:"before (working)"}];
doRequest(p1, p2);
function doRequest(p1, p2) {
$scope.myVal = [{ status: "prepare request (working)" }];
$http.post(url, myQuery).then(() => {
$scope.myVal = [{ status: 'Finished' }]; // $scope is available here
});
}
}
以上是 如何使用AngularJS做XMLHttpRequest(AJAX) 的全部内容, 来源链接: utcz.com/qa/257852.html