0

在 javascript 中,我试图收集变量中的响应并打印它。它将打印变量 undefind,然后打印响应。它将首先打印 servicedata =undefined 然后它将打印从服务器检索到的响应。

var data = get(requiredUrl);
console.log('servicedata ='+jsonstr);

我认为它不是在等待响应并执行它下面的语句。为此,我必须使用线程;我怎么能在javascript中做到这一点?

function get(partenerUrl) {
    var xhr = new XMLHttpRequest();
    xhr.open('GET', partenerUrl, true);

    xhr.send(null);
    xhr.onreadystatechange = function() {
        console.log('in onreadystatechange:' + xhr.readyState + 'status'
                + xhr.status);

        if (xhr.readyState == 4 && xhr.status == 200) {
            var arrayOfObjects = eval(xhr.responseText);
            var jsonstr = JSON.stringify(arrayOfObjects)
            console.log('response>>' + jsonstr);
            return jsonstr;
        }
        return NETWORK_CONNECTION_NOT_FOUND;
    }

}
4

2 回答 2

0

这里有几件事是错误的。该变量jsonstr在您的get函数中声明,因此您的console.log('servicedata ='+jsonstr);调用甚至无法访问它。

但这无论如何都行不通,因为您是正确的,调用是异步的,因此,该行将立即执行。您需要调用函数的console.log内部。get您已经使用console.log('response>>' + jsonstr);. 所以真的看不出问题出在哪里?

PS - 这与线程无关。

于 2012-04-04T14:33:14.980 回答
0

两件事,首先你做

console.log('servicedata ='+jsonstr);

代替

console.log('servicedata =' + data);

此外,您在此处进行 aa(作为异步)jax 查询

 xhr.open('GET', partenerUrl, true /* The `true` here mean asynchronous`*/);

所以脚本不会等待 xhr.onreadystatechange 回调继续,get 方法永远不会给你发送任何东西。如果要获取实际数据,则必须在 xhr.onreadystatechange 回调中进行,或者(这是一个糟糕的选择)将异步参数设置为 false,但它最终会冻结您的应用程序。

于 2012-04-04T14:38:31.733 回答