jQuery.getJSON()
是 jQuery 提供的一个便捷方法,用于通过 HTTP GET 请求从服务器加载 JSON 编码的数据。其语法为:
$.getJSON(url, [data], [callback])
jQuery.getJSON()
确实会受到浏览器同源策略的限制,原因如下:
$.getJSON()
可以用于 JSONP 请求,但需要服务器端特殊支持如果目标 API 支持 JSONP,可以这样使用:
$.getJSON("http://example.com/api?callback=?", function(data) {
console.log(data);
});
注意 URL 中的 callback=?
,jQuery 会自动替换 ?
为随机生成的回调函数名。
服务器需要设置响应头:
Access-Control-Allow-Origin: *
或
Access-Control-Allow-Origin: http://yourdomain.com
前端代码不变:
$.getJSON("http://example.com/api", function(data) {
console.log(data);
});
在自己的服务器上创建代理接口:
// Node.js Express 示例
app.get('/proxy', function(req, res) {
request('http://external-api.com/data', function(error, response, body) {
res.json(JSON.parse(body));
});
});
前端调用自己的代理:
$.getJSON("/proxy", function(data) {
console.log(data);
});
现代浏览器可以使用 fetch API 并设置 mode 为 'cors':
fetch('http://example.com/api', {
mode: 'cors'
})
.then(response => response.json())
.then(data => console.log(data));
Access-Control-Allow-Origin: *
通过以上方法,可以解决 jQuery.getJSON()
的跨域限制问题。