在纯javascript ajax中捕获跨域响应

在纯javascript ajax中捕获跨域响应,javascript,ajax,Javascript,Ajax,我希望在纯javascript ajax中捕获跨域响应,而不使用jquery或其他外部库 var xmlhttp, response; try { xmlhttp = new XMLHttpRequest(); } catch(e) { try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e2) { try { xmlhttp = ne

我希望在纯javascript ajax中捕获跨域响应,而不使用jquery或其他外部库

var xmlhttp, response;

try {
    xmlhttp = new XMLHttpRequest(); 
} catch(e) { 

   try { 
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e2) { 

       try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {}
    }
}

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState==4) { 
        if(callback != undefined) { 
              console.log(xmlhttp.responseText);
        }
    }
}

url = "http://xxxx.com/layer.php?callback=callRes";
xmlhttp.open("GET", url, false);
xmlhttp.setRequestHeader("Content-Type",
                    "application/json,application/javascript,text/javascript");
xmlhttp.send();
花了很多时间和谷歌搜索,但没有找到任何解决方案


建议是最受欢迎的,但不仅仅是脚本方法纯javascript ajax

我假设您希望在控制台中看到响应

在调用
console.log()
之前,您要检查
回调是否存在。在给定的代码段中,
回调
尚未定义,因此这可能是阻止输出
xmlhttp.responseText
的唯一障碍


解决方案:删除
if(callback!=undefined)
,只调用
console.log(xmlhttp.responseText)

。同源策略只能通过使用一些浏览器插件来避免。为什么不是JSONP呢?它必须是JSONP。正如我在问题中提到的,我想使用纯javascript ajax而不是脚本方法。响应来自哪里?您有权调整标题吗?如果是这样,请使用CORS并调整标题以允许前端代码访问。如果您请求的资源在S3上,这甚至可以在S3上完成。您有权访问此文件吗?我正在尝试,但不幸的是它不起作用。您收到一些错误消息吗?在
onreadystatechange
函数的开头添加
console.log(xmlhttp.readyState)
,查看它的运行情况。在网络窗口中获取响应,但不捕获