今天发现json取数据的时候有时会报如下的错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

我是有很多的子域名,网上说是跨域的的问题,貌似可以通过jsonp解决,于是测试了一下,遇到以下几个问题:

1.jsonp好像是通过iframe创建<script>标签来执行请求的,所以默认是通过get方式请求,即使ajax请求的type设为post也被自动转为post,要想以post请求设置也比较麻烦,具体参考:http://stackoverflow.com/questions/3860111/how-to-make-a-jsonp-post-request-that-specifies-contenttype-with-jquery

2.直接将函数放在document.ready闭包里,像下面的写法,不会走到receive函数里

<script type="text/javascript">
$(function() {
//function viewWholePhone(url){
$('#btn_show_num').click(function(){
$.ajax({
    type:"get",
url:$(this).attr("data-check-url"),
data:{sn:'{$sn}'},
dataType: 'jsonp',
crossDomain: true,
jsonp:"callback",
jsonpCallback:"receive",
success:function(ret){
}
});
});
//}
function receive(ret) {
if(ret.status == 0 && ret.data!=null){
$('#store_mobile').text(ret.data.store_mobile);
$('#btn_show_num').hide();
}else{
if(ret.status == 300){
location.href="{$site_url}/index.php?app=member&act=login&ret_url=";
}else{
alert(ret.msg);
$('#btn_show_num').attr('readonly', 'true');
}
}
}
});
</script>

下面这个样子是可以的

<script type="text/javascript">
function viewWholePhone(url){
$.ajax({
type:"POST",
url:url,
data:{sn:'{$sn}'},
dataType: 'jsonp',
crossDomain: true,
jsonp:"callback",
jsonpCallback:"receive",
success:function(ret){
}
});
}
function receive(ret) {
if(ret.status == 0 && ret.data!=null){
$('#store_mobile').text(ret.data.store_mobile);
$('#btn_show_num').hide();
}else{
if(ret.status == 300){
location.href="{$site_url}/index.php?app=member&act=login&ret_url=";
}else{
alert(ret.msg);
$('#btn_show_num').attr('readonly', 'true');
}
}
}
</script>

  

  

jsonp跨域请求的问题的更多相关文章

  1. .net学习之母版页执行顺序、jsonp跨域请求原理、IsPostBack原理、服务器端控件按钮Button点击时的过程、缓存、IHttpModule 过滤器

    1.WebForm使用母版页后执行的顺序是先执行子页面中的Page_Load,再执行母版页中的Page_Load,请求是先生成母版页的控件树,然后将子页面生成的控件树填充到母版页中,最后输出 2.We ...

  2. JSONP跨域请求数据报错 “Unexpected token :”的解决办法

    原文  http://www.cnphp6.com/archives/65409 Jquery使用ajax方法实现jsonp跨域请求数据的时候报错 “Uncaught SyntaxError: Une ...

  3. jQuery ajax的jsonp跨域请求

    一直在听“跨域跨域”,但是什么是跨域呢?今天做了一些了解.(利用jQuery的jsonp) jQuery使用JSONP跨域 JSONP跨域是利用script脚本允许引用不同域下的js实现的,将回调方法 ...

  4. Django学习---jsonp跨域请求

    jsonp跨域请求 我们通过ajax进行跨域请求的时候,请求发送过去,但是在接受返回数据的时候浏览器会进行拦截. 这是由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源 ...

  5. jsonp跨域请求响应结果处理函数(python)

    接口测试跨域请求接口用的jsonp,需要将回调函数里的json字符串提取出来. jsonp跨域请求的响应结果格式: callback_functionname(json字符串). #coding:ut ...

  6. 原生JavaScript封装的jsonp跨域请求

    原生JavaScript封装的jsonp跨域请求 <!DOCTYPE html> <html lang="en"> <head> <met ...

  7. jsonp 跨域请求

    背景: JavaScript是一种在Web开发中经常使用的前端动态脚本技术.在JavaScript中,有一个很重要的安全性限制,被称为"Same-Origin Policy"(同源 ...

  8. 使用JSONP跨域请求数据

    下面代码,可以使用JSONP进行跨域请求数据,Insus.NET记录以下,以备忘记.

  9. jQuery jsonp跨域请求

    跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面是相同的,则两个页面具 ...

  10. 使用jsonp跨域请求

    一.异步对象,不能实现跨域请求 在站点A中访问站点B的数据: 站点A代码: window.onload = function () { document.getElementById("bt ...

随机推荐

  1. iOS的一些坑

    1.动态绑定元素,不能绑定到body上 $(document).on('click','#nuse-content .coupon',fn) 这样是不行的,会导致事件无法触发,除非给要绑定时间的元素显 ...

  2. Clr core

    http://hllvm.group.iteye.com/group/topic/43559

  3. C#脱离Halcon编程开发环境使用方法

    在没有安装Halcon开发程序(HDevelop (SSE2))的电脑上面编程,使C#脱离Halcon编程开发环境使用方法,除了按照Halcon与编程环境必须要做的设置步骤外,还需要做如下两个工作: ...

  4. innodb_strict_mode

    When innodb_strict_mode is ON, InnoDB returns errors rather than warnings for certain conditions. Th ...

  5. Linux 用户态和内核态

    1.特权级特权级用来管理和控制程序执行.如Intel x86架构的CPU,有0~3四个特权级,0级最高,3级最低.硬件在执行每条指令时都会检查指令具有的特权级.硬件提供了特权级使用机制,对操作系统来说 ...

  6. SQL Server中数据库文件的存放方式,文件和文件组

    原文地址:http://www.cnblogs.com/CareySon/archive/2011/12/26/2301597.html   SQL Server中数据库文件的存放方式,文件和文件组 ...

  7. window.parent与window.openner

    window.parent与window.openner区别介绍 作者: 字体:[增加 减小] 类型:转载 今天总结一下js中几个对象的区别和用法,对这几个概念混淆的朋友可以看看 今天总结一下js中几 ...

  8. cocos2d-x,求世界坐标

    老版: http://user.qzone.qq.com/350479720/blog/1384483239 一,求node的世界坐标.因为node的contentSize为0,局部坐标原点与node ...

  9. noip2014普及组 比例简化

    题目描述 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果.例如,对某一观点表示支持的有1498 人,反对的有 902人,那么赞同与反对的比例可以简单的记为1498:902. 不过,如 ...

  10. 如何通过SecureCRT FTP上传下载文件

    通过SecureCRT  FTP方式从一台机器下载文件到另一台机器上: [root@TEST144239 ~]# ftp 10.30.1.25 Connected to 10.30.1.25 (10. ...