博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token
阅读量:5999 次
发布时间:2019-06-20

本文共 2046 字,大约阅读时间需要 6 分钟。

引言

ajax跨域就无法成功获取数据了,需要通过jsonp来处理

报错如下

422101-20161011095838758-1216141902.png

1.改为jsonp

var targeturl = ajaxurl+"?g=Api&m="+m+"&a="+a; // 跨域地址    $.ajax({        type: "get",        url:targeturl,        async:false, // 不支持同步,同步无效        dataType:'jsonp',        jsonp: "callback",        jsonpCallback:"jsonpHandler",        data: {},        success:function(json){        }    });

这个时候,还不够。依旧无法获取json数据

报错如下
422101-20161011100118539-688851963.png

2.需要后台处理

原输出格式

protected function printOut() {    exit(json_encode($this->outData));}

改为新的格式,加上一个callback

protected function printJsonp() {    exit($_GET['callback']."(".json_encode($this->outData).")");}

在XHR中并不能看到

422101-20161011100433289-1552352112.png

它其实属于js范畴,会自动包裹上回调函数名,

422101-20161011100854461-660888266.png

jsonpHandler({
"status":1,"msg":"\u83b7\u53d6\u6210\u529f","info":[{
"id":"1","name":"\u8863\u670d","goods":[{
"goods_id":"1","name":"\u6f02\u4eae\u7684\u8863\u670d","price":"100","logoimg":"http:\/\/image.diandodo.com\/zhudianbao\/Uploads\/User\/u1250000222\/20160723\/201607231342158687.png@250h_250w_1e_1c"},{
"goods_id":"2","name":"\u7f8e\u4e3d\u7684\u8863\u670d","price":"200","logoimg":"http:\/\/image.diandodo.com\/zhudianbao\/Uploads\/User\/u1250000222\/20160723\/201607231342158687.png@250h_250w_1e_1c"}]},{
"id":"2","name":"\u978b\u5b50","goods":[{
"goods_id":"3","name":"\u6f02\u4eae\u7684\u978b\u5b50","price":"100","logoimg":"http:\/\/image.diandodo.com\/zhudianbao\/Uploads\/User\/u1250000222\/20160723\/201607231342158687.png@250h_250w_1e_1c"},{
"goods_id":"4","name":"\u7f8e\u4e3d\u7684\u978b\u5b50","price":"200","logoimg":"http:\/\/image.diandodo.com\/zhudianbao\/Uploads\/User\/u1250000222\/20160723\/201607231342158687.png@250h_250w_1e_1c"}]}]})

3.jsonp不支持同步处理,需要异步处理。

jsonp中async无效。要么把操作写在success中,要么写在回调函数中。

// ajax获取接口数据    ajaxGetApiInfo('Home','getCategoryGoods');    function jsonpHandler(json) {        if (json.status == '1') {            var goods = json.info;            var evalText = doT.template($("#category-goods-tmpl").text());            $("#category-goods").html(evalText(goods));        }    }本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/5948231.html,如需转载请自行联系原作者
你可能感兴趣的文章
可能是最简单的面向对象入门教程(二)为什么要有类型
查看>>
配置Openfiler做ISCS实验
查看>>
Maven启用代理访问
查看>>
LDAP & Implementation
查看>>
hdu 4597 Play Game
查看>>
hdu 1398 Square Coins (母函数)
查看>>
试验性的Numpy教程(译)
查看>>
twitter storm 源码走读之5 -- worker进程内部消息传递处理和数据结构分析
查看>>
CCF 201503-4 网络延时
查看>>
oracle管理控制台不能打开,提示此网站的安全证书有问题?
查看>>
.net获取select控件中的文本内容
查看>>
Windows 8 Metro App开发[5]导航栏(AppBar)的使用
查看>>
shell expect
查看>>
Effective Java -- 使可变性最小化
查看>>
开发环境中Docker的使用
查看>>
Redis 分布式锁
查看>>
IBM、HPUX、Solaris不同之处
查看>>
kuangbin专题十六 KMP&&扩展KMP HDU3336 Count the string
查看>>
Python学习笔记——正则表达式基本概念
查看>>
verilog 里面,always和always@(*)有区别吗?
查看>>