Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回AJAX响应的JavaScript函数(无jQuery)?_Javascript_Ajax - Fatal编程技术网

返回AJAX响应的JavaScript函数(无jQuery)?

返回AJAX响应的JavaScript函数(无jQuery)?,javascript,ajax,Javascript,Ajax,我需要一个纯JavaScript函数(抱歉,没有jQuery),它将从成功的AJAX调用返回响应。这是我到目前为止得到的函数,我想返回HTMLobject,其中包含响应中的HTML: function getHtml(url) { var httpRequest; var HTMLobject; if (window.XMLHttpRequest) { httpRequest = new XMLHttpRequest(); } else if (

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

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完成后返回对象?

没有,这种情况下的解决方案是使用回调函数

例:

用法:

getHtml('url', function(HTMLobject){
    //Do something with HTMLobject
});
而不是

var HTMLobject = getHtml('url');
//Do something with HTMLobject

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

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

httpRequest.open('GET', url,false);//false make request synchronous 
 httpRequest.send();

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

可能重复@Quentin我不想使用任何库。无论您是否使用库,原则都是一样的。投票结果是因为您尝试在没有框架的情况下执行此操作。:)啊,当然。谢谢你解释同步选项,干杯!这可能会产生意想不到的后果,如冻结页面上的UI,直到响应返回,如果服务器或连接出现故障或问题,可能需要很长时间。
httpRequest.open('GET', url,false);//false make request synchronous 
 httpRequest.send();