Angular 서비스 Request 비동기 요청 의 인 스 턴 스 설명
var request = {
post: function() {
var errorCallback = {
error: function(f) {
this.fun = f;
},
fun: function(data) {}
};
successCallback = {
success: function(f) {
return this.fun = f, console.log(this.fun), errorCallback;
},
fun: function(data) {
console.log(data)
}
};
returnData = {
wsscat: "hello"
};
//
//var a = successCallback.fun(returnData);
a = successCallback.fun;
setTimeout('a(returnData)', 1000)
return successCallback;
}
}
request.post().success(function(data) {
console.log("123");
console.log(data);
})
console.log("wscat's test");
여기 서 먼저 이해 해 야 할 것 은 바로 비동기 반전 이다.자바 script 의 비동기 반전 은 사실은 두 가지 상용 방법 이다.setTimeout 정시 클래스 와 aax 요청 클래스
위의 코드 는 angular 의 request 서비스 와 유사 합 니 다.우선 이 request 대상 은 angular 가 request 서 비 스 를 주입 한 후에 돌아 오 는 request 대상 에 해당 합 니 다.
이 대상 은 post 방법 을 썼 고 post 방법 에는 두 개의 반전 대상 이 있 습 니 다.
errorCallback successCallback
아 날로 그 ajax 가 되 돌려 달라 고 요청 한 returnData 대상 도 있 습 니 다.
returnData = {
wsscat: "hello"
};
이 건 angular 에 서 는 ajax 요청 서버 가 당신 에 게 돌아 온 json 대상 입 니 다.이 코드 가 실 행 된 후에 로그 에서 어떤 정보 가 나 오 는 지 보 겠 습 니 다.다음 그림 입 니 다.
자 바스 크 립 트 에 익숙 하 다 면 이해 하기 어렵 지 않 습 니 다.우선 출력 된 함수 정 보 는 success()함수 에 있 는 console.log(this.fun)라 는 말 때 문 입 니 다.
request.post().success()
success()에서 먼저 this.fun=f 는 익명 의 리 셋 함 수 를 successCallback 대상 에 게 부여 하 는 fun 방법 입 니 다.저장 하여 뒤의 setTimeout 을 리 셋 합 니 다.그래서 우 리 는 먼저 인쇄 된 리 셋 함수,그 다음 에 코드 의 마지막 문장 을 실행 하 는 것 을 볼 수 있다.
console.log("wscat's test");
이 절 차 를 알 게 되면 angular 패키지 의 request 서비스 라 는 부분 을 잘 이해 할 수 있 습 니 다.단지 angular 안의 리 셋 은 setTimeout 리 셋 이 아니 라$http 리 셋 으로 바 뀌 었 을 뿐 입 니 다.
$http.get(url).success(function(data, status, headers, config) {
//code
})
$http 요청 은 되 돌아 오 는 성공 이나 실패 에 따라 데 이 터 를익명 리 셋 함수 로 덮어 쓰 고 대상 successCallback 의 fun 에 해당 하 는 방법 으로 가 져 왔 습 니 다.
fun 에 데 이 터 를 넣 으 면 다음 두 마디 입 니 다.
successCallback.fun(returnData);
errorCallback.fun(returnData);
뒤에 제 가 좀 더 깊이 얘 기 할 게 요.
$http.get(url).success(function(data, status, headers, config) {
//code
})
data:이 건 더 이상 설명 할 필요 가 없습니다.우리 위 에서 이렇게 많이 했 는데 사실은 서버 를 우리 에 게 되 돌려 주 려 는 data 입 니 다.status:http 응답 상태 코드,이것 은 매우 기본 적 인 것 이지 만,나 는 간단하게 말 하 겠 습 니 다.
200:의심 하지 마 세 요.성공 을 청 한 다 는 뜻 이에 요.
304:당신 이 요청 한 것 이 허락 된 상황 에서 서버 에서 당신 이 필요 로 하 는 것 이 여전히 이전 과 같 지 않다 는 것 을 발견 하면 304 로 되 돌려 줍 니 다.
404:요청 이 실 패 했 습 니 다.요청 한 자원 을 서버 에서 찾 을 수 없습니다.
500:5 를 보면 보통 서버 오류 가 발생 합 니 다.
자주 보 는 건 이 정도 밖 에 없어 요.
헤더 정보
config:원본 요청 의 설정 대상 을 생 성 합 니 다.다음 그림 입 니 다.
다시 아래 를 보면 사실 post 요청 과 get 요청 의 차이 가 크 지 않 습 니 다.
다만 여기 get 은 더욱 간단명료 합 니 다.url 을 직접 전송 하면 됩 니 다.post 요청 인터페이스 보다 요청 해 야 할 여러 가지 인 자 를 가 져 와 야 합 니 다.
하지만 더 자세히 알 아 보면 사실 post 와 get 은 여기 서 모두 get 요청 을 합 니 다.
서비스 원본 요청
.service('Request', [
'$http',
'$cookies',
'$rootScope',
'$window',
'$cookieStore',
'$location',
function($http, $cookies, $rootScope, $window, $cookieStore, $location) {
var request = {
post: function(api, map, successCallback) {
$rootScope.dataLoadCount++;
$rootScope.isLoading = $rootScope.dataLoadCount != 0;
var url = '../test.php?api=' + encodeURIComponent(api);
//console.log('[http requestURL]:' + api);
//~ alert(api);
var json = '{}';
if (angular.isDefined(map)) {
json = angular.toJson(map);
}
//console.log('[http requestJson]:' + json);
url += '&data=' + encodeURIComponent(json);
var errorCallback = {
error: function(f) {
this.fun = f;
},
fun: function(data) {}
};
var successCallback = {
success: function(f) {
return this.fun = f, errorCallback;
},
fun: function(data) {}
};
$http.get(url).success(function(data, status, headers, config) {
console.log(config);
// this callback will be called asynchronously
// when the response is available
$rootScope.dataLoadCount--;
$rootScope.isLoading = $rootScope.dataLoadCount != 0;
//console.log('[http success responseData]:' + angular.toJson(data));
//~ alert('[http success responseData]:'+angular.toJson(data));
var returnData = {
code: data.state.code,
msg: data.state.msg,
data: data.data
};
if (returnData.code == 1) {
successCallback.fun(returnData);
} else {
if (returnData.code == 99) {
alert(returnData.msg);
$cookieStore.remove('token');
$cookieStore.remove('userid');
delete $cookies.token;
delete $cookies.userid;
$rootScope.isLogined = false;
$rootScope.$broadcast('refreshFooter');
switch ($rootScope.isWeiXinLogin()) {
case true:
$location.path('login');
break;
case false:
$location.path('loginWebapp');
break;
}
return;
}
errorCallback.fun(returnData);
}
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
$rootScope.dataLoadCount--;
$rootScope.isLoading = $rootScope.dataLoadCount != 0;
//console.log('[http error responseData]:' + angular.toJson(data));
//~ alert('[http error responseData]:status:'+status);
var returnData = {
code: 0,
msg: ' ',
data: {}
};
errorCallback.fun(returnData);
});
return successCallback;
},
get: function(url, successCallback) {
$rootScope.dataLoadCount++;
$rootScope.isLoading = $rootScope.dataLoadCount != 0;
var errorCallback = {
error: function(f) {
this.fun = f;
},
fun: function(data) {}
};
var successCallback = {
success: function(f) {
return this.fun = f, errorCallback;
},
fun: function(data) {}
};
$http({
method: 'GET',
url: url
}).success(function(data, status, headers, config) {
// this callback will be called asynchronously
// when the response is available
$rootScope.dataLoadCount--;
$rootScope.isLoading = $rootScope.dataLoadCount != 0;
//console.log('[http success responseData]:' + data);
var returnData = {
code: 1,
msg: ' ',
data: data
};
successCallback.fun(data);
}).
error(function(data, status, headers, config) {
// called asynchronously if an error occurs
// or server returns response with an error status.
$rootScope.dataLoadCount--;
$rootScope.isLoading = $rootScope.dataLoadCount != 0;
//console.log('[http error responseData]:' + angular.toJson(data));
var returnData = {
code: 0,
msg: ' ',
data: ""
};
errorCallback.fun(returnData);
});
return successCallback;
}
}
return request;
}
])
이상 의 Angular 서비스 Request 비동기 요청 의 인 스 턴 스 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
연말이므로 웹 앱을 만들었습니다.minmax 패널을 번갈아 가서 총 득점을 겨루는 게임이다. 선수는 좋아하는 위치에서 시작된다. 후손은 선수가 선택한 위치를 포함한 세로 일렬 중에서 패널을 선택한다. 다시 선수는 후손이 선택한 패널을 포함한 가로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.