2010-05-30 36 views
1

我想用javascript的Bing搜索API。 實際上,我希望用戶寫一些東西並查詢Bing以獲取圖像。bing search api ajax不工作

所以,我試着用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?

謝謝。

btw。我只是想解決這個Firefox和沒有外部庫(jQuery等)。

回答

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

+0

你不能做XHR跨域。你需要JSONP <---我想,這將發生在Bing或谷歌或雅虎apis,對吧? – jhon 2010-05-30 06:17:37

+0

是的,您將遇到與任何XHR到不同域的問題。我知道Google有特定的服務可以讓您在沒有XHR的情況下實現此目標;也許Bing有類似的東西。 – dmazzoni 2010-05-30 06:20:35