本文给大家讲述的是个人在一个项目中遇到的关于jsonp的post跨域问题的解决过程,这里记录下来,分项给大家。
近期在项目中遇到这样一问题,关于jsonp跨域问题,get传值是可以的,但post传值死活不行啊,于是网上看了一大堆关于这方面的资料,最终问题得以解决,今天抽空与大家分享下。
说明:
http://www.t1.com/index.php 服务端URL
当然这是我本地配置的,需要改为自己对应的地址。
客户端代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<script> $( function (){ $.ajax({ type: 'post' , url: url, data: {name: 'wangyulu' }, dataType: 'jsonp' , success: function (result){ console.log(result); } }); }); </script> |
服务端代码:
1
2
3
4
5
|
<?php if ( $_POST ){ $arr = array ( 'name' => $_POST [ 'name' ], 'age' =>23); echo json_encode( $arr ); } |
浏览器运行如下图:
看下运行结果,即使设置传送方式为 post,Jquery也会自动转为 get,难道Jsonp真的不支持 post 方式提交吗,继续折腾...
折腾到现在最终在 stackoverflow 里找到一些关于这方面的资料,看来老外也遇到这样问题呀,地址贴给大家
http://stackoverflow.com/questions/3860111/how-to-make-a-jsonp-post-request-that-specifies-contenttype-with-jquery
关键点如下图:
看上图我们发现,箭头标记处有变化,先不管这么多了,折腾这么久了,先对应放到程序里再说嘛,万一可以呢
客户端更改:
添加:crossDomain: true
修改:dataType: "json"
服务端添加:
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Max-Age: 1000');
运行结果如下图:
转自:http://www.jb51.net/article/68980.htm