2013-05-07 2 views
1

JQuery .Deferred/.promise을 사용하여 AJAX 요청을 작성하려고합니다. 페이지가로드 될 때 함수가 실행되고 아무 것도 나타나지 않고 변수 issueData에 액세스 할 수 없습니다. 함수를 실행하면 정의되지 않지만 내 AJAX 호출은 JSON 객체를 반환합니다. 나는 문제가 issueData.deferred().promise()JavaScript가 JQuery 지연으로 정의되지 않음

function getIssues(issueData) { 
    var issueData = new jQuery.Deferred(); 
    return $.ajax({ 
     url: 'http://localhost:49650/Issues.svc/GetIssues', 
     type: 'GET', 
     dataType: 'json', 
     success: function(data) { 
      issueData = data; 
     }, 
     error: function() { 
      alert('Call not resolved') 
     } 
    }); 
    return issueData.promise();  
} 
+0

을 아무 것도 함수에서 실행되지, 그래서 당신은 결코한다 to return problemData.promise(); –

+0

비동기 프로그래밍을 사용하려고 시도하는 것처럼 보이지만, 그 데이터를 얻는 데 도움이되지 않는'issueData = data'와 같은 것들로 돌아가는 것으로 되돌아갑니다. –

+0

케빈, 나는 시도하고 있지만 배우는 동안 내 시도에 성공하지 못했습니다. 올바른 예제 나 리소스를 제공 하시겠습니까? 주어진 답은 여전히 ​​정의되지 않은 값을 반환하므로 잘못된 구조가 있다고 상상해보십시오. – Alexander

답변

3

현재 jQuery.Deferred()를 사용할 필요가 없습니다 :

해결책은 이것이다. return $.ajax({})이 필요합니다. 또한 AJAX는 비동기이므로 issueData = data;은 유용하지 않습니다.

반환 된 데이터를 가져 오기 위해 콜백을 사용해야합니다. 당신이 success 기능을 사용할 수

function getIssues() { 
    return $.ajax({ 
     url: 'http://localhost:49650/Issues.svc/GetIssues', 
     type: 'GET', 
     dataType: 'json', 
     error: function() { 
      alert('Call not resolved') 
     } 
    }); 
} 

getIssues().done(function(data){ 
    // use the returned JSON here 
}); 

을 또는 :

당신이 할 수있는`$ .ajax`을 반환 한 후

function getIssues() { 
    return $.ajax({ 
     url: 'http://localhost:49650/Issues.svc/GetIssues', 
     type: 'GET', 
     dataType: 'json', 
     success: function(data){ 
      // use the returned JSON here 
     }, 
     error: function() { 
      alert('Call not resolved') 
     } 
    }); 
} 

getIssues(); 
2

달러 (A $) .resolve() 문이 누락 어떻게 설정에 있는지 알아 내려고 노력하고있어 두 '반환'문이, 두 번째 '복귀' 절대로 도달하지 않습니다. $.ajax 당신이 처리,

function getIssues(issueData) { 
    var deferred = jQuery.Deferred(); 
    $.ajax({ 
    url: 'http://localhost:49650/Issues.svc/GetIssues', 
    type: 'GET', 
    dataType: 'json', 
    success: function(data) { 
     var receivedData = data; 
     ....  
     deferred.resolve(); 
    }, 
    error: function() { 
     alert('Call not resolved') 
    } 
    }); 
    return deferred.promise();  
} 
+0

해결 방법은 getIssues에서 issueData를 반환하지 않기 때문에 실제로 아무 것도하지 않습니다. –

+0

전적으로 동의합니다, 예제를 편집하겠습니다. –

관련 문제