繁体   English   中英

xhr请求上的回调不起作用

[英]Callback on xhr request doesn't work

当我使用Google chrome开发者控制台运行代码时,出现了一些问题。 我当前的页面是vk.com。 我用这个代码

var request_url = 'https://vk.com/dev/openapi';//similar domain
var requestData = function(request_url, callback) {
    var xhr = new XMLHttpRequest();
        xhr.open('GET', request_url, true);
        xhr.onreadystatechange = function() {
            if(xhr.readyState==4 && xhr.status==200) {
                var content = xhr.responseText;
                console.log(callback(content))
                callback(content);
            }
        }
    xhr.send();
};

var dataEl = requestData(request_url, function(content) {
        var el = document.createElement( 'html' );
        el.innerHTML = content;
        return el;
});

它不起作用,因为dataEl未定义,但console.log向我展示了……我想要什么。

如果使用这样的代码:

var requestData = ...(similar)
var contentNew = requestData(request_url, function(content){return   content});
var el = document.createElement( 'html' );
el.innerHTML = contentNew;

el不是空的或未定义的对象。 这就是我想要的

在没有手动输入的情况下如何使用XHR?

回调 return是没有意义的,要么return更多的回调 ,要么使代码事件驱动。

除此之外,还有一些旧的编码样式,您唯一的错误似乎是试图设置el.innerHTML = dataEl; 当您似乎想要el.innerHTML = content;

这是使用XMLHttpRequest的演示

function xGET(url, callback, error_callback) {
    var xhr = new XMLHttpRequest();
    xhr.addEventListener('load', callback);
    if (error_callback)
        xhr.addEventListener('error', error_callback);
    xhr.open('GET', url);
    xhr.send();
    return xhr; // why not?
};

var my_url = '/'; // for demo

xGET(my_url, function () {
    var el;
    // creating a <html> doesn't make much sense
    // this example will use a <div> instead
    el = document.createElement('div');
    // do something with your XHR's data
    el.textContent = this.responseText;
    // do something with `el`
    document.body.appendChild(el);
}, function () {
    var el = document.createElement('div');
    el.textContent = 'Something went wrong :(';
    document.body.appendChild(el);
});

DEMO上的jsfiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM