2016-10-14 3 views
0

JQuery를 사용하여 객체 배열에 대한 REST 요청을하고 있습니다.올바른 형식으로 REST 요청에서 JQuery 결과를 변환 할 수 없습니다.

코드의 "성공"부분에서는 모든 것이 좋지만 배열의 객체는 올바른 유형으로 변환됩니다. 그러나 변수 (docStructures)에 할당하고 JQuery 메서드에서 변수를 이동하려고하면 객체가 "정의되지 않음"이됩니다.

어떻게 이것을 피하고 개체의 올바른 유형을 유지하는 메서드 범위 외부에서 변수를 전달할 수 있습니까?

jQuery.ajax({ 
    type: 'GET', 
    url: contextPath + "/rest/dcm-jira/1.0/document/structure", 
    data: { 
    "issueId": selectedRevision.issueId 
    }, 
    success: function(structures) { 
    docStructures = structures; 
    console.log(docStructures) 
    }, 

}); 
console.log(docStructures) 
+1

A :

이 코드를 정돈 보이게하려면 jQuery의 지연 메커니즘을 사용할 수 있습니다. $ .ajax는 비동기 함수입니다. 비동기 함수 처리가 가장 일반적인 js 질문이라고 생각합니다. –

+0

음 - AJAX 작동 방식은 서버에서 응답을받을 때 호출 할 함수를 전달하는 것입니다. 귀하의 코드가 현재하고있는 일은 - 응답 로그'docStructures'를 다시받을 때 (성공한 경우)에 할당되지 않은'docStructures' (코드의 마지막 줄)를 기록하고, 아약스를 수행합니다. – eithed

+0

아직 중복에 투표 할 수 없습니다. 이것은 명백한 중복입니다 : http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call –

답변

1

AJAX는 비동기식이므로 아무 것도 반환 할 수 없습니다.

jQuery.ajax({ 
    type: 'GET', 
    url: contextPath + "/rest/dcm-jira/1.0/document/structure", 
    data: { 
    "issueId": selectedRevision.issueId 
    }, 
    success: function(structures) { 
    docStructures = structures; 
    console.log(docStructures) 
    }, 

}); 
// problematic 
console.log(docStructures) 

문제가 아약스 요청이 완료되기 전에 그것을 실행하는 것입니다 : 당신이 인 경우에만 성공 콜백

1

코드에 문제가있는 라인 내부의 AJAX 요청의 결과를 소모한다. 그렇지 않으면 모든 것이 또한 잘

작업해야한다, 당신은 여분의 쉼표 success:{},< 후이 - 브라우저가 실행 즉 그것은

+1

standart에 의해 허용되는 객체 리터럴의 추가 쉼표 및 모두에서 완전히 괜찮음 나중에 ie8 브라우저. –

+0

@ Mr.Duck - 여분의 쉼표를 볼 때 내 OCD가 제어권을가집니다. – Ted

+0

내 것이기는하지만 추가 쉼표는 하나의 인수가 있습니다. 더 명확한 병합이 있습니다. 따라서 허용 된 코드 스타일의 문제입니다. –

0

이 성공 함수가 비동기 적으로 실행 삭제해야합니다 :

  1. jQuery.ajax 문
  2. 다음 jQuery.ajax 문 다음에 console.log 문
  3. 다음 Aja x 요청이 성공하면 success 함수 내에서 console.log를 실행합니다.

성공 기능의 범위를 벗어나는 데이터를 가질 방법이 없습니다. 비동기에 대한

var myAjaxRequest = jQuery.ajax({ 
    type: 'GET', 
    url: contextPath + "/rest/dcm-jira/1.0/document/structure", 
    data: { 
     "issueId": selectedRevision.issueId 
    } 
}); 

myAjaxRequest.done(function (structures) { 
    docStructures = structures; 
    console.log(docStructures) 
}); 
관련 문제