2009-10-10 6 views
2

보다 체계적인 코드를 위해서, req.onreadystatechange 핸들러에 콜백 함수를 두는 대신 데이터를 반환하고 싶습니다.AJAX 응답 텍스트를 반환하려면 어떻게해야합니까?

다음 javascript에서는 ajax 응답 전에 parse_data() 함수가 호출되기 때문에 "raw_data"var이 정의되지 않았습니다.

function dostuff(){ 
    var raw_data = ajax_fetch_data(); 
    var parsed_data = parse_data(raw_data); 
} 

이 (가) 데이터를 반환하는 ajax_fetch_data 내 req.onreadystatechange까지 parse_data()를 호출 할 수 있습니까?

ajax_fetch_data() 내에서 콜백으로 중첩 된 parse_data() 호출을 사용하는 것을 좋아하지 않습니다.

+0

그에게 말하지 마십시오. 이제 그는 돌아가서 모든 질문에 무작위로 대답 할 것입니다. –

+1

아, 죄송합니다. 나는 어떻게 든 당신이 대답을 받아 들여야한다는 사실을 간과했다. 생각 대답의 품질은 단순히 투표 수에 반영되었습니다. 돌아가서 내 질문에 대한 올바른 대답을 수락하겠습니다. – makeee

답변

1

Ajax의 A는 "비동기"를 의미합니다. 호출이 비동기 인 경우에는 이와 같은 반환 값을 사용할 수 없습니다. 콜백으로 이벤트를 기다려야합니다. 두 번째 줄에 false는 동기 특성 (세 번째 인수의 기본값입니다 true)을 지정

var req = new XMLHttpRequest(); 
req.open('GET', 'http://www.example.org/', false); 
req.send(null); 
if(req.status == 200) 
    return req.responseText; 

: 그러나이 같은 동기 요청을 보낼 수 있습니다.

Mozilla Developer Center에 더 많은 것이 있습니다.

+1

잘못되었습니다. 동기 요청을 작성할 수 있습니다. –

+0

의견에 감사드립니다. 동기식 요청을 포함하도록 답변을 변경했습니다. 더 이상 오류가 발견되면 알려주세요. –

+0

당신은 여전히 ​​makeee가하고 싶어하는 것이 불가능하다는 것을 의미합니다. 그러나 당신은 그가하고 싶은 일을 정확히하는 방법의 예를 따라 그것을 따라합니다. –

1

이 코드는 지나치게 모호합니다. var raw_data = ajax_fetch_data();

은 보통은 다음과 같이이다 :

// url = ... 
// data = ... 
create_ajax_request(url, data, callback); 
// This will continue to execute like normal 
// ... 
// ... 
// ... 

// Now, in a differnt part of the code: 
function callback() { 
    // Sometime later, when AJAX returns data, this is called. 
} 

을 그래서 기본적으로 두 개의 스레드를 가지고 : 당신이 요청을 "시작"메인 프로그램 및 요청이 완료되면 호출되는 콜백 함수를. 이것은 여전히 ​​세부 사항을 무시합니다. 당신은 에이잭스 (syncronous 자바 스크립트 & XML에 대한 나쁜 약어)를 원하는 경우

, 당신은 jQuery를 같은 것을 사용할 수 있습니다. (

var result = null; 
$.ajax({ 
    aync: false, 
    data: data, 
    url: url, 
    success: function(data) { 
     result = data; 
    } 
}); 
// result is populated before $.ajax() moves on, so you can use it right after 
console.log('result: ' + result); 

그러나,이 바쁜-대기를 수행 즉, 브라우저가 붙어있다/데이터가 들어올 때까지 잠긴 상태로 유지 될 수 있습니다 ... 몇 분이 될 수 있습니다. 따라서 필요한 경우에만 사용해야합니다. 데이터를 가져 와서 처리하려는 경우 콜백을 사용하십시오.

// Call this to start a request 
function startRequest() { 
    data = ... 
    create_ajax_request(url, data, continueRequest); 
} 

// This is called once we have the data 
function continueRequest(data) { 
    alert(data); 
} 

이것은 AJAX 프로그램에서보다 일반적입니다.

관련 문제