前天第一次使用jquery向服务器发送Get请求。结果吸拜了...查看console提示说"No ‘Access-Control-Allow-Origin‘ header is present on the requested resource. Origin ‘null‘ is therefore not allowed access.",嗯好吧,google了一下才知道是跨域问题。
跨域访问:AJAX 跨域访问是用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面 ——百度百科
还有搜了一些文章,我的理解就是javaScript有同源策略限制,js文件只能操作获得 同域名,同端口 的数据。所以当我在本地打开html,向服务器发出请求的时候,一开始它是拒绝的~ 把自己写的html 文件放到服务器上打开就没问题。
(这样岂不是很麻烦,每次修改点什么东西都要往上提交一下才能测试??? )
还好jQuery封装了JSONP的功能。
关于JSONP(JSON with Padding)
注意JSON和JSONP差别很大! json是一种轻量级数据格式,而jsonp可以理解成一种协议。上面提到javaScript有同源策略,但是对某些标签却造不成物理伤害(script、iframe、img、等带src属性的标签)。而JSONP的核心就是使用script标签来调用服务器提供的js脚本,而JSON对Javascript原生支持,所以JSONP就是把得到的JSON数据当成JavaScrip对象,这样就不存在跨域问题了。
JSONP使用方法
JavaScript演示
// 服务器返回结果后调用的函数
var callback = function(data){
console.log(data);
};
// 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)
var url = "http://yoururl.com";
// 创建script标签,设置其属性
var script = document.createElement(‘script‘);
script.setAttribute(‘src‘, url);
// 把script标签加入head,此时调用开始
document.getElementsByTagName(‘head‘)[0].appendChild(script);
jQuery演示
$.ajax({
type: "get",
url:"http://yoururl.com",
dataType: "jsonp",
data: {
},
//服务器返回后直接调用success 函数,就不用我们自己定义callback了。
success: function(object) {
console.log(object);
}
})