首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JavaScript函数返回AJAX响应(没有jQuery)?

JavaScript函数返回AJAX响应(没有jQuery)?
EN

Stack Overflow用户
提问于 2013-02-28 10:58:55
回答 2查看 1.4K关注 0票数 1

我需要一个纯JavaScript函数(抱歉,没有jQuery),它将从一个成功的AJAX调用返回响应。下面是我到目前为止得到的函数,我想从响应中返回带有HTMLobject的HTML:

代码语言:javascript
运行
复制
function getHtml(url) {
    var httpRequest;
    var HTMLobject;

    if (window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!httpRequest) {
        console.error('Cannot create an XMLHTTP instance');
        return false;
    }

    httpRequest.onreadystatechange = function() {
        if (httpRequest.readyState === 4) {
            if (httpRequest.status === 200) {
                // OK, turn the string into HTML.
                var div = document.createElement('div');
                div.innerHTML = httpRequest.responseText;
                // Assign the converted HTML to HTMLobject.
                HTMLobject = div.childNodes[0];
            } else {
                console.debug('There was a problem with the request.');
            }
        }
    };

    httpRequest.open('GET', url);
    httpRequest.send();

    return HTMLobject;
}

我知道为什么,HTMLobject返回未定义的,但我需要它的工作。有办法让函数在AJAX完成后返回对象吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-28 11:00:13

不,解决方案是这样的,就是使用回调函数。

例如:

代码语言:javascript
运行
复制
function getHtml(url, callback) {
    ....
    ....
    callback(HTMLobject); //instead of returning the HTMLobject, call a callback function as pass the `HTMLobject` as a argument.
}

用法:

代码语言:javascript
运行
复制
getHtml('url', function(HTMLobject){
    //Do something with HTMLobject
});

而不是

代码语言:javascript
运行
复制
var HTMLobject = getHtml('url');
//Do something with HTMLobject

发出请求async: false是个坏主意,因为它会阻塞页面直到请求完成( ui不会被重新绘制,ui交互也不会发生)。

票数 1
EN

Stack Overflow用户

发布于 2013-02-28 11:03:09

使请求同步,只需执行以下操作

代码语言:javascript
运行
复制
httpRequest.open('GET', url,false);//false make request synchronous 
 httpRequest.send();

"false“选项表示调用是同步的,这意味着代码将挂起,直到响应返回。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15133753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档