我想用javascript使用Bing的搜索API。 实际上,我希望用户写一些东西并查询Bing以获得图像。
所以,我尝试使用ajax。 如果我直接尝试使用网址http://api.search.live.net/xml.aspx?Appid=[YOURAPIKEY]&sources=image&query=home(使用浏览器),我会获得一个xml文档。
但是如果我使用XMLHttpRequest它就不起作用。
<html>
<body>
<script>
var xhr = new XMLHttpRequest();
var url="http://api.search.live.net/xml.aspx?Appid=[YOURAPIKEY]&sources=image&query=home"
xhr.open("GET", url, true );
xhr.onreadystatechange=function(){
/*if( xhr.readyState == 4 && xhr.status == 200) {
document.write( xhr.responseText );
}*/
alert( "state: "+xhr.readyState +" status: "+xhr.status +" statusText: "+xhr.statusText +" respText: "+xhr.responseText);
};
xhr.send(null);
</script>
</body>
</html>
问题: 1)为什么上面的代码不起作用? 2)没有XMLHttpRequest的任何其他方法吗?
感谢。
顺便说一句。我只是想为Firefox修复此问题而没有外部库(jquery等)。
答案 0 :(得分:1)
您无法进行XHR跨域。你需要JSONP。
<script type="text/javascript">
function processBingImages(resp){
...
};
</script>
<script type="text/javascript" src="http://api.search.live.net/json.aspx?Appid=[YOURAPIKEY]&sources=image&query=home&JsonType=callback&JsonCallback=processBingImages"></script>
如果需要,您可以使其动态化(使用createElement("script")
等)。请参阅this answer。
使用JsonType=callback
我们指定JSONP,JsonCallback
参数指定响应应该调用processBingImages
。 MSDN documentation有详细信息。