2016-07-13 3 views
0

The jQuery doco shows an example where two $.ajax calls are made under the control of a $.when ('예제'제목 아래로 페이지). 괜찮아요하지만 내가하고 싶은 것은 (내가 호출을 준비하기 위해 다른 물건을 할 수있는) 함수 내에서 그 $.ajax 통화를 정의하는 것입니다jQuery/.when - 인수를 함수로 패키지합니까?

$.when($.ajax("/page1.php"), $.ajax("/page2.php")) 
    .then(myFunc, myFailure); 

.

그래서 이런 식으로 뭔가 :

$.when(myAjaxCall1(), myAjaxCall2()) 
    .then(goodFetches, badFetches); 

나는 시도 그 같은 봐 기능 :

var myAjaxCall1 = function() 
{ 
    return $.ajax('https://httpbin.org/get?Z=Y,X,W'); 
}; 
var myAjaxCall2 = function() 
{ 
    return $.ajax('https://httpbin.org/get?A=B,C,D'); 
}; 

나는 각각 goodFetches에 인수로 세 가지 요소의 배열을받을 수 있나요 myAjaxCall1myAjaxCall2하지만 위의 예제에 표시된대로 $.ajax 전화를 $.when에 바로 입력하면받는 정보와 다릅니다. 그것은 기능에서 잘 작동합니다

$.when($.ajax("https://httpbin.org/get?Z=Y,X,W"), 
     $.ajax("https://httpbin.org/get?A=B,C,D")) 
    .then(goodFetches, badFetches); 
+0

난 당신이 그렇게 할 수 있다고 생각하는 $ 아약스 호출하기 때문에 응답을 기다리고 그래서 서버가 응답을하기 전에'return'을 호출하는 동안 반환 값이 없습니다. –

+0

@FadhlyPermata -'$ .ajax()'가 반환하는 것과 동일한 함수로부터 약속을 반환 할 수 있습니다. – jfriend00

+0

콜백의 이름을'goodFetches, badFetches'라고하면'$ .when'이하는 일을 정확히 이해하지 못한다. 그것은'.then (allGood, anyBad)'와 더 비슷합니다. (그리고 어떤 약속과도 마찬가지로, 둘 중 하나만 불릴 것입니다.) – Bergi

답변

2

: 행동이 동등되도록

어떻게 myAjaxCall1myAjaxCall2 구조 조정을해야한다. 아마도 결과에서 인수를 제대로 액세스하지 못했을 것입니다. 각각 세 개의 요소를 포함하는 하위 배열 인 일련의 인수가 있습니다. [data, statusText, jqXHR]. 이러한 인수는 함수에서 약속을 반환하는 한 함수에서 아약스 호출을했는지 여부에 관계없이 동일합니다.

여기 JQuery와 문서에서 예제 : 당신이 함수의 약속을 반환하는 경우

$.when($.ajax("/page1.php"), $.ajax("/page2.php")).done(function(a1, a2) { 
    // a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively. 
    // Each argument is an array with the following structure: [ data, statusText, jqXHR ] 
    var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It" 
    if (/Whip It/.test(data)) { 
    alert("We got what we came for!"); 
    } 
}); 

IT는 $.ajax() 호출이 $.when() 인수에 직접 경우 차이가 없습니다 나. 같은 결과.


그래서, 당신은이 작업을 수행 할 수 있으며 다시 .then() 처리기에서 같은 데이터를 얻을 것이다 :

var myAjaxCall1 = function() { 
    return $.ajax('https://httpbin.org/get?Z=Y,X,W'); 
}; 

var myAjaxCall2 = function() { 
    return $.ajax('https://httpbin.org/get?A=B,C,D'); 
}; 

$.when(myAjaxCall1(), myAjaxCall2()).then(function(a1, a2) { 
     // a1[0] is data from first ajax call 
     // a2[0] is data from second ajax call 
}); 
관련 문제