我正在从chrome控制台执行以下操作:(这可能是我遇到问题的原因吗?)
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
console.log("response:",this.responseText);
}
xhr.open('GET', 'http://loc.gov/pictures/search/?q=a&fo=json&callback=JSON_CALLBACK');
网址有效并且跨域工作。为什么xhr.responseText
仍为空?
答案 0 :(得分:0)
发布的网址没有CORS标头,但它确实支持JSONP。
另一方面,JSONP不是ajax,jQuery只是整齐地包装它,但是在普通的javascript中你必须使用脚本标记来获取JSONP数据function JSON_CALLBACK(data) { // define callback function
console.log(data);
}
// then create and insert the script tag, once loaded the callback will be called
var script = document.createElement('script');
script.src = 'http://loc.gov/pictures/search/?q=a&fo=json&callback=JSON_CALLBACK';
document.body.appendChild(script);
答案 1 :(得分:0)
确实有效。尝试使用此代码段:
xhr = new XMLHttpRequest();
xhr.open("GET","http://loc.gov/pictures/search/?q=a&fo=json&callback=JSON_CALLBACK",false);
xhr.onreadystatechange = function() {
if (xhr.readyState==4 && xhr.status==200)
console.log(xhr.responseText);
};
xhr.send(null);
问题在于您将该功能应用于第一次更改。它实际上应该仅应用于XMLHttpRequest对象的四个状态更改事件
答案 2 :(得分:0)
您提供的网址does not work cross-domain。服务器不允许跨源请求。
我使用的版本是返回JSON的JSON版本。您提供的链接是JSONP,它不是AJAX,您必须使用<script>
加载它。
顺便说一句,您的代码中缺少xhr.send()
,而您的xhr永远不会被发送。