2014-12-22 4 views
0

나는 이것을 my earlier question부터 알아 내기 위해 애 쓰고 있습니다.자바 스크립트 변수에 ajax json 객체 배치하기

사파리에서 Develop > Show Web Inspector을 (를) 사용하는 자료에서 볼 수 있듯이 데이터를받을 수 있습니다. 하지만 나중에 사용할 변수에 성공적으로 할당 할 수 없습니다.

<script> 
function getData() { 
    $.ajax 
    ({ 
     type: "GET", 
     url: "https://myjirasite.com/jira/rest/api/2/project/ON/versions?", 
     dataType: 'jsonp', 
     //async: true, 
     beforeSend: function (xhr) {xhr.setRequestHeader('Authorization', make_base_auth("myusername", "mypassword"));}, 
     success: function(){ 

     //Attempt 1 at outputting the result to an alert. 
     alert(JSON.parse(data));    
     } 
    }); 

    } 


function make_base_auth(user, password) { 
    var tok = user + ':' + password; 
    var hash = btoa(tok); 
    return 'Basic ' + hash; 
} 

</script> 

두 번째 시도에서 변수에 ajax 호출을 지정하고 경고에 출력하려고 시도합니다. 성공하지 못했습니다. 경고는

var jqXHR = $.ajax 
    ({ 
     type: "GET", 
     url: "https://myjirasite/jira/rest/api/2/project/ON/versions?", 
     dataType: 'jsonp', 
     async: false, 
     beforeSend: function (xhr) {xhr.setRequestHeader('Authorization', make_base_auth("myusername", "mypassword"));}, 
     success: function (data){ 
     alert(JSON.parse(data));    
     } 
    }); 

    alert(JSON.parse(jqXHR.responseText)); 

내가 문제가 아약스 호출이 비동기 인 상태에있는 것을 알고 비어,하지만 난 이후에 사용할 수있는 변수로 JSON 데이터를 얻을 수 있도록 콜백을 작성하는 방법을 알아낼 수 없습니다 다른 기능을 통해.

+0

가변 데이터를 사용하십시오. 그것은 서버에서 반환 값이 될 곳입니다. 서버 측에서 cal을 삭제 했습니까? 거기 도착할 거라 확신합니까? –

+0

@ NelsonTeixeira, 불행히도 서버 측에서 디버깅 할 수 없습니다. 우리 회사의 생산 .... – TheMightyLlama

+0

그리고 당신의 URL이 맞습니까? 아무것도 반환하지 않는 로컬 서버에서이 코드를 시도하십시오. 그것이 작동하는 경우에 틀린 URL다는 것을 당신은 알 것이다 –

답변

0

async: false을 설정하지 마십시오. 브라우저가 차단되어 Ajax 요청이 처리됩니다.

대신 약속을 사용하거나 성공 콜백 내에서 추가 기능을 호출 할 수 있습니다. 같은

뭔가 :

function getData(){ 
    return $.ajax({ 
    type: "GET", 
    url: "https://myjirasite/jira/rest/api/2/project/ON/versions?", 
    dataType: 'jsonp', 
    beforeSend: function(xhr){ 
     xhr.setRequestHeader('Authorization', make_base_auth("myusername", "mypassword")); 
    } 
    }); 
} 

getData() 
.done(function (data){ 
    console.log(JSON.parse(data));    
}) 
.fail(function(){ 
    console.log("Error!"); 
}); 
0
<script> 

var getData = function() { 

    $.ajax 
    ({ 
     type: "GET", 
     url: "https://myjirasite.com/jira/rest/api/2/project/ON/versions?", 
     dataType: 'jsonp', 
     //async: true, 
     beforeSend: function (xhr) {xhr.setRequestHeader('Authorization', make_base_auth("myusername", "mypassword"));}, 
     success: function(){ 

     //Attempt 1 at outputting the result to an alert. 
     alert(JSON.parse(data));    
     getData.data= JSON.parse(data); 
     } 
    }); 

    } 


function make_base_auth(user, password) { 
    var tok = user + ':' + password; 
    var hash = btoa(tok); 
    return 'Basic ' + hash; 
} 

setTimeout(function(){console.log(getData.data);}, 3000); // Fire after 3 seconds to get data. 

</script> 
+0

위와 동일하지만'undefined'를 반환합니다. JSON 반환에 여러 객체가있는 경우 이것이 일어날 가능성이 있습니까? – TheMightyLlama

0

내가 $.ajax을 생각하지 않는다 실제로 아무것도 반환 - 그러나 나는 틀릴 수 있었다. 어느 쪽이든, 그것은 너무 중요하지 않습니다. 왜냐하면 여러분은 즉시 사용할 수있는 ajax 호출 결과에 의존하지 않아야하기 때문입니다. alert 문은 Ajax 요청이 완료되기 전에 실행됩니다. 이미 알고있는 것처럼 들립니다.

비동기 호출 (ajax)을 활용할 때 콜백에서 반환 된 데이터 (또는 @Jack Zelig가 언급 한 약속)에서 반환 된 데이터를 사용하는 논리를 사용하는 것이 가장 좋습니다. . 이것은 의 매개 변수가 $.ajax 인 모든 것입니다. 요청이 성공적으로 완료되면 호출됩니다. completeerror 콜백을 정의 할 수도 있습니다. 요청이 완료되면 (상태에 관계없이) 요청이 실패하면 실행됩니다. 이런 식으로

var jqXHR = $.ajax 
({ 
    type: "GET", 
    url: "https://myjirasite/jira/rest/api/2/project/ON/versions?", 
    dataType: 'jsonp', 
    success: successHandler 
}); 

function successHandler(data) { 
    alert(JSON.parse(data)); 
} 

, 데이터 경고 데이터를 포함하는 표시됩니다 수신 한 번만 :

그래서 당신의 최선의 선택은 아마도 이것이다, 요약합니다.

+0

이것은 정상적으로 작동하지만 경고는 여전히 '정의되지 않음'으로 표시됩니다. 사실 나는 console.log에 대한 경고를 대체했다. – TheMightyLlama

+0

successHandler에서 중단 점을 설정하고 반환되는 데이터 ('JSON.parse'이전) 또는 'console.log (data)' . 'data'가 정의되지 않은 경우 서버 측에 오류가 있거나 URL이 잘못되었습니다. –

+0

console.log (data)는'undefined'를 반환합니다. – TheMightyLlama

관련 문제