!!!下面的問題已經由Andrew Whitaker的回答(很好的例子)得到了回答。基本上,您可以使用$ .getJSON(..)以編程方式從諸如YQL之類的服務中獲取JSON數據,並指出此服務可以與不同的域相關聯(即,不是由加載頁面的相同域提供的) 。通常情況下,您不能向不同的域發出這樣的請求,因此在實現請求時使用了「技巧」,在該請求中動態生成HTML並將其插入到DOM中,並獲取並執行新的跨域腳本。在執行返回的腳本時,它會導致處理攜帶的JSON並調用您提供的回調函數。由於此技術盲目執行返回的腳本,因此必須小心安全問題(可能類似於加載任何腳本)。爲了啓用跨域功能,在提供的getJSON url中包含選項「?callback =?」是非常重要的,該選項被jQuery選中並刪除/修改爲使用JSONP跨域調用的信號技術。請注意,這種返回JSON數據的方法依賴於JSONP的服務器端支持。再次感謝所有的幫助。 !如何用JavaScript中的Ajax調用替換加載腳本文件(使用帶JavaScript的YQL)
下面的代碼發佈到YQL並獲取IBM的當前股票價格(作爲示例)。它工作正常,通過加載一個腳本文件來完成它的任務,該腳本文件的URL有效地導致了JSON數據的動態生成,在加載和執行時會導致運行「top_stories」並提取價格。不過,我希望基於AJAX調用($ .getJSON(..))來實現這個過程,我假定我從下面的基於腳本的示例中分離出url和數據組件。我已經嘗試了很多變體而沒有成功 - 它看起來並不像我能獲得$ .getJSON(..)調用來調用回調函數。任何想法將不勝感激。 ...埃裏克
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>YQL</title>
<style type='text/css'>
#results{ width: 40%; margin-left: 30%; border: 1px solid gray; padding: 5px; height: 200px; overflow: auto; }
</style>
<script type='text/javascript'>
// Parses returned response
function top_stories(o) {
var price = o.query.results.xml_api_reply.finance.last.data;
alert("last = " + price);
// Place price in div tag
document.getElementById('results').innerHTML = price;
}
</script>
</head>
<body>
<!-- Div tag for stories results -->
<div id='results'></div>
<!-- The YQL statment will be assigned to src. -->
<script src="http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20google.igoogle.stock%20where%20stock%3D'ibm'%3B&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=top_stories"></script>
</body>
</html>
查找相同的來源策略,您違反了。 – Anders 2012-07-17 00:15:01
不與YQL和JSONP :) – 2012-07-17 00:17:30
我嘗試了下面的受訪者提供的代碼(謝謝!),發現它可以在Chrome瀏覽器下工作,但不是IE瀏覽器(包括jsfiddle網站示例 - 什麼是整潔)。我試圖禁用IE的XSS過濾器,防火牆,並儘量減少IE的安全設置,但這沒有幫助。 – 2012-07-17 03:07:58