2016-10-22 2 views
2

다음 코드가 있습니다. 내가하고있는 일은 먼저 아약스의 첫 번째 URL을 요청하는 것입니다. 나는 응답을 얻었고 그 응답으로부터 어떤 데이터가 필요하다. 그래서 그 데이터를 user 개체에 넣습니다. 그 응답은 또한 또 다른 URL을 포함합니다. 그런 다음 새 URL에 또 다른 아약스 요청을합니다. 그리고 URL에서 응답을 얻고 그 데이터를 user 개체에 추가합니다. 마지막으로 then() 기능에서 나는 user 개체를 반환합니다. 그러나 get().done(function(data) { console.log(data) })으로 전화하면 user.data 배열 만 사용할 수 있습니다. 첫 번째 아약스 요청에는 사용자의 세부 정보가 포함되지 않습니다. 이 두 요청의 데이터를 병합하고 약속 (지연된 어쩌면)으로 반환 할 수 있습니까? 이 기능jquery 약속으로 연결된 아약스 요청

function(user) { 
    user['name'] = user.name; 
    user['joined'] = user.create_at; 

    return $.ajax({ 
     url: user.url, 
     method: 'GET', 
     type: 'JSON' 
    }); 
} 

당신은 함수의 지역 scopeuser 변수를 만드는에서

var get = function() { 
     var user = {}; 

     return $.ajax({ 
      url: 'URL', 
      method: 'GET', 
      type: 'JSON' 
     }).then(function(user) { 
      user['name'] = user.name; 
      user['joined'] = user.create_at; 

      return $.ajax({ 
       url: user.url, 
       method: 'GET', 
       type: 'JSON' 
      }); 
     }).then(function(data) { 
      user['data'] = data; 
      return user; 
     }); 
    }, 
+0

'var user = {};''user'는'function (user) {'에있는'user'와 같지 않습니다. 그리고 콜백의 처음 두 줄에서 무엇을하고 있습니까? 본질적으로 아무 것도 ... var 사용자 이름을'var anythingButUserOrDataForThatMatter'로 바꿉니다. –

답변

1

. 따라서 user['name'] = user.name;을 수행 할 때 할당의 왼쪽 부분에서 가장 높은 범위에서 외부에 정의한 var user = {}을 참조하지 않고 로컬 user을 참조합니다.

(체인 당신은 처음 그 때는 내에서 두 번째 그 때는 넣어 user 객체

var get = function() { 
    var user = {}; 

    return $.ajax({ 
     url: 'URL', 
     method: 'GET', 
     type: 'JSON', 
     context: user 
    }).then(function(user) { 
     this['name'] = user.name; 
     this['joined'] = user.create_at; 

     return $.ajax({ 
      url: user.url, 
      method: 'GET', 
      type: 'JSON', 
      context: this 
     }); 
    }).then(function(data) { 
     this['data'] = data; 
     return this; 
    }); 
} 
2

같은 다른 가져온 user 데이터 뭔가를 명명 시도 $ .ajax 호출에)

var get = function() { 
    return $.ajax({ 
     url: 'URL', 
     method: 'GET', 
     type: 'JSON' 
    }).then(function(user) { 
     return $.ajax({ 
      url: user.url, 
      method: 'GET', 
      type: 'JSON' 
     }).then(function(data) { 
      return { 
       name: user.name, 
       joined: user.create_at, 
       data: data 
      }; 
     }); 
    }); 
}, 

다른 어떤 것도 필요하지 않습니다. 변수는 모두

+0

@ 2619 jsfiddle https://jsfiddle.net/bLcn0j27/1/ – guest271314

1

$.ajax() 통화의 context 옵션을 설정할 수 있습니다 userData

+0

여러 가지 AJAX 호출이 필요한 경우, 불필요한 중첩을 많이 수행합니까? – Terry

+0

이 경우에는 두 가지만 있기 때문에 문제를 중첩하는 것을 고려하지 않았지만이 방법을 사용하는 운명의 피라미드 –