【发布时间】:2019-12-07 10:05:33
【问题描述】:
我正在研究 JSONP 回调函数的概念。我阅读了一些关于此的文章,并希望很好地掌握 JSONP 的概念。
所以,我上传了一个 json 文件到服务器 - json file
这是我为检索数据而编写的 js 代码。调用是从 localhost 到 abhishekprakash.com。
var xhr;
var dataList;
xhr = new XMLHttpRequest();
xhr.open('GET', 'http://abhishekprakash.com/script/example.json?callback=func_callbk', true);
xhr.send();
func_callback = function(data){
alert(data.data.people[0].id);
}
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
console.log(dataList);
}
};
这是我在控制台中得到的响应:
回调函数被调用,但它不包含 Json 数据。 我错过了什么?
感谢任何帮助。
谢谢
【问题讨论】:
-
调用哪个回调?
onreadystatechange还是func_callback?似乎您的响应是 JSON,而不是 JSONP,所以我看不到如何调用func_callback。 -
该服务未返回正确的 JSONP 响应。是否应该明确支持 JSONP 调用?
-
在控制台的 Params 选项卡中,我得到方法 func_callback
-
@deceze 由于调用是跨域的,它应该是 JSONP。这是 JSONP 的标准,对吧?
-
要么设置 cors 标头,要么使用 jsonp。维基百科上有一篇关于同源策略的好文章,您完全误解了 JSON 和 JSONP 之间的区别。 JSON 是 "{\"message\":\"hello world\"}" JSONP 是回调({message:"hello world"})。 JSON 可以用 xhr 检索,而 jsonp 应该通过添加 srcipt 元素并将其 src 属性设置为 jsonp 来自的 url 来检索。然后在你的代码中你需要为回调提供一个函数
标签: javascript ajax jsonp