2016-10-27 3 views
3

시간을내어 질문을 읽어 주셔서 감사합니다!바닐라 JSONP 요청의 응답 저장 JavaScript

JSONP 요청의 응답을 나중에 동일한 서버에 다른 요청을 한 후 액세스 할 수있는 새 개체에 저장하려고합니다. 이 기능의 목적은 사용자가 이전 요청의 데이터를 스크롤 할 수있게하는 것입니다. 내가 displayData 개체가 전역 변수에 할당 할 필요가 있다고 생각

window.onload = getData; 
function getData() { 
    var script = document.createElement("script"); 
    script.src = "http://api.forismatic.com/api/1.0/?method=getQuote&lang=en&format=jsonp&jsonp=displayData"; 
    document.getElementsByTagName("head")[0].appendChild(script); 
} 

function displayData(response) { 
    document.getElementById("quote").innerHTML = response.quoteText; 
    document.getElementById("cite").innerHTML = response.quoteAuthor; 
} 

:

내 코드입니다. 나는 그것을하기위한 여러 가지 방법을 시도해 왔고 그것을 작동시키는 것처럼 보일 수 없다. 도와주세요.

+0

질문에 소스를 포함하십시오. 오프 사이트 리소스에 대한 링크는 부패하는 경향이 있습니다. – Tibrogargan

+0

@Tibrogargan 나는 "소스"가 무슨 뜻인지 이해하지 못합니다. api에 소스 URL이 있습니까? –

+0

당신은 그것을 포함 시켰습니다. 그는 아마도 이미 거기에있는 소스 코드를 의미합니다 .... – Feathercrown

답변

3
window.onload = getData; 
function getData() { 
    var script = document.createElement("script"); 
    script.src = "http://api.forismatic.com/api/1.0/?method=getQuote&lang=en&format=jsonp&jsonp=displayData"; 
    document.getElementsByTagName("head")[0].appendChild(script); 
} 

var previousResponses = []; 

function displayData(response) { 
    previousResponses.push(response); 
    document.getElementById("quote").innerHTML = response.quoteText; 
    document.getElementById("cite").innerHTML = response.quoteAuthor; 
} 

이제 모든 이전 응답이 포함 된 의도가 있습니다.

+0

이것은 효과가있다. 이제 jsonpData [0] .quoteText를 통해 객체 속성 값에 액세스 할 수 있습니다. 고맙습니다! –

+0

...하지만 문제는 당신이 답을 얻었을 때 결코 알 수 없으며 찾고있을 때 배열이 여전히 비어있을 수 있습니다. – Bergi

1

사용 약속 :

var data = new Promise(function getData(resolve, reject) { 
    window.setData = resolve; 
    var script = document.createElement("script"); 
    script.src = "http://api.forismatic.com/api/1.0/?method=getQuote&lang=en&format=jsonp&jsonp=setData"; 
    script.onerror = reject; 
    document.getElementsByTagName("head")[0].appendChild(script); 
}); 

당신은 다음과 같이 사용할 수 있습니다 :

window.onload = function displayData() { 
    data.then(function(response) { 
     document.getElementById("quote").innerHTML = response.quoteText; 
     document.getElementById("cite").innerHTML = response.quoteAuthor; 
    }); 
}; 

그냥 당신이 원하는 때마다하는 then data에를 체인 - 데이터가 아직없는 경우 콜백가 대기 짐을 실은.