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

本文共 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,如需转载请自行联系原作者
你可能感兴趣的文章
macos下安装oh-my-zsh和zsh-autosuggestion
查看>>
联合主键用hibernate注解映射方式主要有三种:
查看>>
hdu2767之强联通缩点
查看>>
qualcomm permission denied for tty device
查看>>
IDEA远程debug的使用
查看>>
自然语言处理要解决的问题
查看>>
RVM 安装 Ruby
查看>>
Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十四)定义一个avro schema使用comsumer发送avro字符流,producer接受avro字符流并解析...
查看>>
分布式锁的几种实现方式
查看>>
solr 忽略大小写
查看>>
WEB前端资源代码:面试篇
查看>>
PHP面试题汇总
查看>>
[转]XNA 错误:No suitable graphics card found
查看>>
当 IDENTITY_INSERT 设置为 OFF 时,不能向表 'tb_User' 中的标识列插入显式值。
查看>>
[Web前端]CSS实现“不可选择,不可复制”面临的问题
查看>>
Linux学习笔记四--Bash Shell
查看>>
objective-c判断两条线段相交
查看>>
NYOJ-2 括号配对问题
查看>>
SocketException: java.net.BindException: Address already in use
查看>>
SQLSERVER中的AWE功能
查看>>