如何在javascript中使用线程

时间:2012-04-04 14:24:56

标签: javascript ajax

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

}

2 个答案:

答案 0 :(得分:0)

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

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

PS - 这与线程无关。

答案 1 :(得分:0)

两件事,首先你做

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

而不是

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

此外,你在这里做了一个(作为异步)jax查询

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

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