XMLHttpRequest没有获得responseText

时间:2014-04-11 21:19:31

标签: javascript ajax console xmlhttprequest

我正在从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仍为空?

3 个答案:

答案 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);

FIDDLE

答案 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。服务器不允许跨源请求。

enter image description here

我使用的版本是返回JSON的JSON版本。您提供的链接是JSONP,它不是AJAX,您必须使用<script>加载它。

顺便说一句,您的代码中缺少xhr.send(),而您的xhr永远不会被发送。