在调用ajax时在javascript中获取未定义

时间:2010-07-07 08:40:05

标签: javascript ajax undefined

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);
}

当我以json格式获取数据时...我在NULL中获得alert(get_request(url)); 当我进入alert(data);

帮帮我

4 个答案:

答案 0 :(得分:3)

这是因为异步请求。 get_request(url)函数确实返回任何内容,因此返回null(尽管我认为它应该是未定义的而不是null)。

当AJAX请求完成并且从服务器返回数据并且因此警报有效时,onreadystatechange函数将在稍后调用。

答案 1 :(得分:0)

这是对AJAX如何工作的误解。 Ajax是异步。在{/ em> onreadystatechange之后,loadjobs()函数将被称为。您指定的“返回路径”永远不会起作用。 get_request()永远无法返回获取的值。

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

或者,更好的是,在onreadystatechange回调中处理您需要做的所有事情。

答案 2 :(得分:0)

问题是Ajax请求工作异步。因此您无法立即返回数据。你应该这样做的方法是指定一个回调函数来处理响应数据。

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;
}​

答案 3 :(得分:0)

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