这是我简单的网页:
<!DOCTYPE html>
<html>
<head>
</head>
<body onload="start()">
</body>
</html>
这是我的XMLHttpRequest:
function start(){
//Name the function that will perform request
var httpRequest;
//cross browser instance
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject){ //if IE 8 and older
httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
httpRequest.onreadystatechange = httpResult; //what to do after response
httpRequest.open("GET","http://data.mtgox.com/api/2/BTCUSD/money/ticker_fast?pretty", true);
httpRequest.send();
function httpResult(){
if (httpRequest.readyState === 4 && httpRequest.status === 200){
alert(httpResult.responseText);
} else {
alert("problem making request");
}
}
}
当我加载页面时,它运行代码并返回“问题请求”警报3次。我没有看到JavaScript控制台中弹出任何错误。任何人都有一个线索,为什么我没有从请求中得到适当的回应?
答案 0 :(得分:2)
您似乎违反了浏览器中内置的same origin policy
限制,阻止您发送跨域AJAX请求。
您只能将AJAX请求发送到发起脚本的域。在您的情况下,您尝试向http://data.mtgox.com
发送请求,这只有在您的网页托管在同一个域名时才有效,我怀疑这不是您的情况。
答案 1 :(得分:1)
每次onreadystatechange
属性更改时都会触发readyState
处理程序。这意味着你的其他部分将一直执行,直到readyState
变为4。
问题是您是否正在尝试访问responseText
的{{1}}属性,即httpResult
处理程序。而是使用onreadystatechange
。
httpRequest.responseText
这不是与CORS相关的问题,您的URL允许CORS请求。
顺便说一句,您必须使用if (httpRequest.readyState === 4 && httpRequest.status === 200){
alert(httpResult.responseText);
}
处理程序来检测onerror
错误。