在获取数据时,用XMLHttpRequest时,会有同源策略的限制。所谓同源是指,域名,协议,端口相同。形象些来说就是,A服务器中有个网页中含有JavaScript代码,这段代码如果用XMLHttpRequest来获取数据的话,就只能在A服务器中获取,不能获取B服务器中的数据。
因此,可以用<script>来获取非同源的数据,这种方式也叫JSONP,全称为JSON with Padding,因为使用这种方式时通常要指定一个回调函数,所请求的JSON数据也被包裹在这个回调函数中。
<!doctype html>
<html lang="en">
<head>
<title>Mighty Gumball (JSON)</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="mightygumball.css">
<script>
function <strong>updateSales</strong>(sales) {
var salesDiv = document.getElementById('sales');
for (var i = 0; i < sales.length; i++) {
var sale = sales[i];
var div = document.createElement('div');
div.setAttribute('class','saleItem');
div.innerHTML = sale.name + ' sold ' + sale.sales + ' gumballs';
salesDiv.appendChild(div);
}
}
</script>
</head>
<body>
<h1>Mighty Gumball Sales</h1>
<div id="sales">
</div>
<strong><script src="http://gumball.wickedlysmart.com/?callback=updateSales"></script></strong>
</body>
</html>
上段代码中,定义了updateSales函数来处理获取到的数据,并显示在网页中的div中。
地址http://gumball.wickedlysmart.com实际上是提供了一个JSON,使用的<script>来获取这个JSON时,已经自动将JSON解析为JS对象了,而后面的?callback=updateSales则是指定了一个回调函数,意思是当JSON对象传输到浏览器之后,要调用updateSales函数来处理这个对象。
特别注意:<script>获取的数据已经自动把JSON解析为JS对象,而XMLHttpRequest获取的数据是JSON字串,在处理时要注意数据格式。