1

我想将 Bing 的搜索 api 与 javascript 一起使用。实际上,我希望用户写一些东西并查询 Bing 以获得图像。

所以,我尝试使用ajax。如果我直接(使用浏览器)尝试 url 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 等)。

4

1 回答 1

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")等)。看到这个答案

通过使用JsonType=callback我们指定 JSONP,并且JsonCallback参数指定响应应该调用processBingImages. MSDN 文档有详细信息 。

于 2010-05-30T06:01:29.010 回答