调用ajax时在javascript中未定义

调用ajax时在javascript中未定义,javascript,ajax,undefined,Javascript,Ajax,Undefined,当我获取json格式的数据时……我在警报(get_请求(url))中获取NULL 当我进入警报(数据)时 帮帮我这是对AJAX工作原理的误解。Ajax是异步的。onreadystatechange函数将在loadjobs()之后调用。您指定的“返回路径”永远无法工作get_request()将永远无法返回获取的值 你有两个选择。要么使脚本同步-可以完成,但不建议这样做,因为它可以冻结浏览器 或者,更好的方法是在onreadystatechange回调中处理所有需要执行的操作。问题在于Ajax请求

当我获取json格式的数据时……我在
警报(get_请求(url))中获取
NULL
当我进入
警报(数据)时


帮帮我这是对AJAX工作原理的误解。Ajax是异步的。
onreadystatechange
函数将在
loadjobs()之后调用。您指定的“返回路径”永远无法工作
get_request()
将永远无法返回获取的值

你有两个选择。要么使脚本同步-可以完成,但不建议这样做,因为它可以冻结浏览器


或者,更好的方法是在
onreadystatechange
回调中处理所有需要执行的操作。

问题在于Ajax请求是异步工作的。所以你不能马上返回数据。您应该指定一个回调函数来处理响应数据

function get_request(url) {
  var request = new getXMLObject();
  request.onreadystatechange = function () {
    if (request.readyState == 4) {
      alert(request.responseText);
      var data = eval('(' + request.responseText + ')');
      alert(data);
      return data;
    }   
  }
  request.open("GET", url, true);
  //alert(document.getElementById('energy').innerHTML);
  request.send();
}

function loadjobs() {
  var url = "loadjobs.php?tab=1&id=1111";
  //var data=
  //alert(check());
  alert(get_request(url));
  //alert(data);
}

这是因为请求是异步的。
get\u请求(url)
函数不返回任何内容,因此返回null(尽管我认为它应该是未定义的,并且不为null)


onreadystatechange
函数稍后会被调用,此时AJAX请求已完成,数据从服务器返回,因此警报会生效

嗯,这是一个异步的调用。在
获取请求
返回后,您将收到请求的数据。这意味着您的
request.onreadystatechange=function()
将在
alert(get_request(url))之后很久执行已完成。这意味着
get\u request
将无法从AJAX调用返回任何数据。这就是您的
请求.onreadystatechange
回调函数的作用,以便在稍后收到响应时在未定义的时间执行代码

function handleJSON( data ) {
  // ...
  // do whatever you want to do with the data
}

ajax( "url/file.php?param=value", handleJSON );

////////////////////////////////////////////////////////////////////////////////

function getXmlHttpObject() {
    var xmlHttp;
    try {
        xmlHttp = new XMLHttpRequest();
    } catch (e) {
        try {
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp;
}

function ajax(url, onSuccess, onError) {
    var xmlHttp = getXmlHttpObject();
    xmlHttp.onreadystatechange = function () {
        if (this.readyState == 4) {
            // onError
            if (this.status != 200) {
                if (typeof onError == 'function') {
                    onError(this.responseText);
                }
            }
            // onSuccess
            else if (typeof onSuccess == 'function') {
                onSuccess(this.responseText);
            }
        }
    };
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
    return xmlHttp;
}​