2010-08-06 5 views
1

좋아요. XMLHttpRequest가 작동하는지 확인하기 위해 몇 가지 변수 선언을 생략했습니다.AJAX는 단지 readyState == 4를 반환합니다

function submit_edit_form() 
{ 
    // id and title are already declared 
    var x = ajax_edit_form_save(id, 'title', title); 
    alert(x); 
} 
function ajax_edit_form_save(id, property, new_value) 
{ 

    if (window.XMLHttpRequest) 
    { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else 
    { 
     // screw IE5 & IE6 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState == 4 && xmlhttp.responseText != '') 
     {  
      return xmlhttp.responseText; 
     } 
    } 

    // myURL is already defined. I'm not troubleshooting this part, I know it's working 
    xmlhttp.open("GET", myURL, true); 
    xmlhttp.send(); 
} 

그래서 나는 ajax_edit_form_save() 나는 '정의되지 않은'경고를 얻을를 호출 submit_edit_form()를 호출 할 때. 문제는 ajax_edit_form_save()가 readyState 1에서 정의되지 않은 값을 반환한다는 것입니다. readyState == 4 일 때만 반환하므로 머리를 긁적니다. x가 실제 값을 가져올 수 있도록 반환 값을 보류 할 수 있습니까? responseText?

답변

3

ajax 호출이 완료되기 전에 함수가 비동기이기 때문에 반환됩니다. "onreadystatechange"의 return 문은 값이 XMLHttpRequest 객체이며 코드가 아닌 메서드 "onreadystatechange"의 호출자에게 반환되기 때문에 아무런 효과가 없습니다. readyState의는 아래를 참조 4

당신은 호출되는 당신의 ajax_edit_form_save에 콜백 함수를 통과해야합니다

function ajax_edit_form_save(id, property, new_value, funCallback) // ==> callback function 
{ 

    if (window.XMLHttpRequest) 
    { 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else 
    { 
     // screw IE5 & IE6 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState == 4 && xmlhttp.responseText != '') 
     {  
      callback(xmlhttp.responseText); // =============> callback function called 
     } 
    } 

    // myURL is already defined. I'm not troubleshooting this part, I know it's working 
    xmlhttp.open("GET", myURL, true); 
    xmlhttp.send(); 
} 

콜백 기능이 될 수있다 :

function handleReponse(resp) { 
    // do something with resp 
} 

ajax_edit_form_save("myID", "myProperty", "new value", handleResponse); 
+0

나는 당신을 사랑한다고 생각합니다. 나는 이것에 대해 완전히 생각하지 않았다. 나는 그것을 확인하려고하고있다. 나는 당신에게 수표를 줄 것이다. –

+0

나는 그것을 완전히 받아 들여서 사용할 수있다. 고맙습니다! –

+0

@ Adam Tootle 환영합니다! – naikus

0

했다 당신은 그 파일에서 어떤 것을 얻었습니까? 제 생각에는 URL 값을 언급하는 것을 잊었습니다.

+1

그 문제는 아니었다. 요청이 제대로 작동하고 있음을 압니다. 반환 값을 처리해야합니다. –