인수를 ajax onreadystatechange 콜백으로 전달하시겠습니까?
익명의 on readystatechange 콜백에 인수를 전달하는 일반적인 순수 javascript(JQuery가 아님) 방법은 무엇입니까?
예를 들어 다음과 같습니다.
function doRequest(){
/* Get an XMLHttpRequest in a platform independent way */
var xhttp = getXmlHttpRequestObject();
var msg="show this message when done"; /* another variable to pass into callback */
/* How do I pass 'msg' and 'xhttp' into this anonymous function as locals
named 'x' and 'm'??? */
xhttp.onreadychangestate=function(x,m)
{
if( x.readyState == 4 )
{
alert(m);
}
}
/* do the open() and send() calls here.... */
}
Javascript는 클로징을 지원하므로 귀하가 작성한 익명 함수에 액세스할 수 있습니다.xhttp
그리고.msg
에워싸고doRequest()
범위.
이것을 명시적으로 실시하는 경우(예를 들면, 코드의 다른 장소에 콜백 함수를 정의해 재이용하는 경우)에는, 콜백을 작성하는 함수를 작성할 수 있습니다.이를 통해 다른 이름으로 액세스할 수 있는 변수에 별칭을 지정할 수도 있습니다(예:x
그리고.m
):
function createCallback(x, m) {
return function() {
/* Do whatever */
};
}
그리고 나서doRequest()
,하다xhttp.onreadystatechange = createCallback(xhttp, msg);
변수를 '이름 변경'하는 것만으로 다음 작업을 인라인 및 익명으로 수행할 수 있습니다.
xhttp.onreadystatechange = (function(x, m) {
return function() {
/* Do stuff */
}
})(xhttp, msg);
위의 답변 중 일부는 나에게 효과가 없었다.우선 파라미터가 없는 개별 callBack 함수의 경우:
xhttp.onreadystatechange = callBack; //works; the function's NAME is required
다음으로 몇 가지 파라미터를 수신하도록 callBack 함수가 변경되었다고 가정합니다.
xhttp.onreadystatechange = callBack(x,m); //didn't work, and didn't know why
xhttp.onreadystatechange = createCallback(xhttp,msg); //bad part of above Answer
단, StackOverflow의 다른 곳에서는 onreadystate change에 대해 "함수 호출"이 아닌 "함수 참조"를 할당해야 한다고 설명하고 솔루션을 게시했습니다.
xhttp.onreadystatechange = function(){callBack(x,m);}; //works
다른 답변에 뭔가를 추가하려고 왔는데, 지금 찾을 수 없습니다.그래서 여기에 추가하는 게 나을 것 같아요.제 코드로 로컬 변수와 글로벌 변수를 모두 사용하다가 제대로 작동하지 않는 것을 발견했습니다. 하지만 이제 무슨 일이 일어났는지 알게 되었습니다. Word Of Warning이 적절해 보입니다.g가 글로벌 변수라고 가정합니다.
xhttp.onreadystatechange = function(){callBack(x,g);};//anonymous function works
함수 참조는 특정 시점(T0)에 onready state change에 할당되어 다른 시각(T1)에 callBack 함수가 호출됩니다.T1에서의 글로벌 변수 "g" 값은 callBack 함수에 전달되는 값이지 함수 참조가 T0에 할당되었을 때의 "g" 값이 아닙니다.(로컬 변수는 보통 T1에서 범위를 벗어나기 때문에 어나니머스 함수의 파라미터 값을 설정할 때 JavaScript는 T0에서 기존 값을 사용해야 하기 때문에 일반적으로 이 문제가 발생하지 않습니다.)
늦지 마세요! :-)
다소 복잡한 xhttp.onreadystatechange 인수를 사용하여 데이터를 전달하는 대신 xhr 객체 자체에 속성을 추가할 수 있습니다.
예:
var m = "Hello!";
var xhttp = new XMLHttpRequest();
xhttp.m = m;
xhttp.onreadystatechange = function()
{
var x, m;
x = this;
m = x.m;
if ((x.readyState == 4) && (x.status == 200))
{
alert(m);
}
};
// ...
언급URL : https://stackoverflow.com/questions/8582663/pass-arguments-into-ajax-onreadystatechange-callback
'prosource' 카테고리의 다른 글
wordpress에서 id로 게시물 존재 여부 (0) | 2023.02.12 |
---|---|
카운터에서 디스커스 반응을 제거하는 방법 (0) | 2023.02.12 |
토큰 유효기간 및 로그아웃 사용자를 확인하려면 어떻게 해야 합니까? (0) | 2023.02.12 |
Wordpress 본문 태그에 사용자 지정 클래스 이름을 추가하시겠습니까? (0) | 2023.02.12 |
Wordpress의 예기치 않은 출력으로 인해 쿠키가 차단되었습니다. (0) | 2023.02.12 |