来自httprequest的Javascript Returing Value

jri*_*ggs 0 javascript xmlhttprequest

php脚本返回一个值,第一个警报正常工作.

我无法在第二个警报中引用httprequest返回的值.理想情况下,我会调用函数get_captcha() - 它会返回值 - 它只是我不知道如何做到这一点.

我意识到在全球范围内设置变量可能不是最好的方法,但这是我唯一能想到的 - 我对替代方案持开放态度.

  <script type="text/javascript">
   var url = "captcha_get_code.php"; // The server-side script 
   var cap;

   function ValidateForm() {
    get_captcha()
    alert(cap); //undefined

    }

    function get_captcha() {      
      http.open("GET", url, true); 
       http.onreadystatechange = handleHttpResponse; 
       http.send(null); 

}

  function handleHttpResponse() {    
    if (http.readyState == 4) { 
       if (http.status==200) { 
            //return http.responseText; 
        cap=http.responseText; 
            alert(cap);  //this one works
            }

        } 
    } 



function getHTTPObject() { 
  var xmlhttp; 

  if(window.XMLHttpRequest){ 
    xmlhttp = new XMLHttpRequest(); 
  } 
  else if (window.ActiveXObject){ 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    if (!xmlhttp){ 
        xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); 
    } 

} 
  return xmlhttp;   
} 
var http = getHTTPObject(); // We create the HTTP Object 





</script>   
Run Code Online (Sandbox Code Playgroud)

Poi*_*nty 6

无法从成功的XMLHttpRequest调用中"返回"值.您可以执行任何你需要的分类处理内部的回调函数.

XMLHttpRequests是异步执行的.你不能让你的代码"等待"它们(除非你让它们同步)(你真的,真的不应该这样做).但是,没有必要,因为运行时系统会在请求完成时调用"readystatechange"处理程序.从该代码中,您可以随心所欲地做任何事情.

这个事实要求你对如何编写代码有一点看法,但实际上并没有那么多的调整.如果,例如,你会倾向于写一个"processResults()"功能,那么你仍然可以做到这一点-你只需调用,从里面的"readystatechange"处理程序.