jquery ajax 약속 콜백에 추가 매개 변수 전달
저는 추가적인 파라미터를 그에게 전달해야 합니다..done
jquery ajax 호출의 콜백을 약속합니다.
$.post("MyUrl", JSON.stringify(data))
.done(onMyUrlLoaded);
표준 콜백은 다음과 같습니다.
function onMyUrlLoaded(data, textStatus, jqXHR) { /* function code */ };
하지만 저는 콜백에 추가 파라미터를 전달해야 합니다. 다음과 같이 말이죠.
function onMyUrlLoaded(data, textStatus, jqXHR, extraParam) { /* code */ };
어떻게 하면 되죠?
참고: 이 질문은 약속 콜백에 대한 질문이므로 중복되지 않습니다.게다가 이 질문은 중복되는 질문보다 2살이나 더 오래되었고, 훨씬 더 철저한 답변과 약속에 대한 구체적인 답변을 제공합니다.
다음과 같이 새로운 방향 레벨을 포함한 작업이 매우 쉽다는 것을 알게 되었습니다.
var extraParam = 'xyz';
$.post("MyUrl", JSON.stringify(data))
.done(function(a,b,c) { onMyUrlLoaded(a, b, c, extraParam); });
이런 식으로 콜백은 세 가지 표준 파라미터 외에 추가 파라미터를 수신합니다.
물론 약속이 다음과 같은 함수에 의해 반환되는 변수(예: 변수)에 저장된 경우에도 이 작업을 수행할 수 있습니다.
function getUrl() {
// some code ...
var promise = $.post("MyUrl", JSON.stringify(data));
return promise;
}
다음과 같이 호출 및 사용할 수 있습니다.
var promise = getUrl();
var extraParam = 'xyz';
promise.done(function(a,b,c) { onMyUrlLoaded(a, b, c, extraParam); });
이렇게 하는 데는 bind를 사용하는 것으로 구성되는 짧은 구문이 있습니다.
전화할때bind
함수에서는 새로운 함수를 얻게 됩니다.바인딩하기 위해 전달된 첫 번째 매개 변수는 다음과 같습니다.this
반환 함수의 본체 내부에 있습니다.추가 매개변수는 원래 인수 앞에 붙여집니다.
다음 코드는 바인딩을 사용하는 방법을 보여줍니다.TL;DR의 경우 마지막 두 코드 블록을 찾습니다.
// To show the results in the page
var $log = $('#log');
var log = function(text) {
$log.append(text+'<br/>');
};
// This returns a promise, and resolves it after the specified
// timeout. This behaves like a jQuery ajax call (but for the
// provided timeout)
var trigger = function(timeout) {
log('<b>trigger</b> invoked');
var deferred = $.Deferred();
setTimeout(function() {
log('<b>trigger</b> resolving promise');
deferred.resolve('A','B');
}, timeout);
return deferred;
};
// This is the function we want to invoke
// The promise returns a and b - the extra params
// must be supplied in some way
var extraParams = function(extra1, extra2, a, b) {
log('<b>extraParams</b> extra1:' + extra1);
log('<b>extraParams</b> extra2:' + extra2);
log('<b>extraParams</b> a:' + a);
log('<b>extraParams</b> b:' + b);
};
// Doing it using indirection
trigger(500).then(function(a,b) {
extraParams('extra1','extra2',a,b);
});
// Doing it using bind()
trigger(1200).then(
extraParams.bind(this,'extra1','extra2')
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="log">
</div>
언급URL : https://stackoverflow.com/questions/21985201/pass-extra-parameters-to-jquery-ajax-promise-callback
'programing' 카테고리의 다른 글
ng-href에서 각도js 함수 (0) | 2023.10.21 |
---|---|
파이어폭스 '크로스 오리진 요청 차단' 헤더에도 불구하고 (0) | 2023.10.21 |
Google Chrome -- Chrome Beta 8에 대해 파일 접근 허용이 비활성화되었습니다. (0) | 2023.10.16 |
tmpfile() 경로 검색 (0) | 2023.10.16 |
MySQL 정수 0 대 NULL (0) | 2023.10.16 |