jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token

简介:

引言

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,如需转载请自行联系原作者
相关文章
|
8月前
|
JSON 前端开发 JavaScript
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(三)
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(三)
|
8月前
|
缓存 JSON 前端开发
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(二)
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(二)
|
8月前
|
XML 数据采集 Web App开发
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)(一)
AJAX(GET POST请求、 jQuery axios 发送请求、跨域--cors、请求超时、网络异常、放弃请求、重复发送请求)
|
前端开发 JavaScript Java
spring boot jquery ajax ie8解决跨域
spring boot jquery ajax ie8解决跨域
137 0
|
JSON JavaScript 前端开发
❤️一个有趣小案例教你如何使用原生js使用和jquery应该如何使用jsonp❤️
❤️一个有趣小案例教你如何使用原生js使用和jquery应该如何使用jsonp❤️
106 0
❤️一个有趣小案例教你如何使用原生js使用和jquery应该如何使用jsonp❤️
|
JavaScript 前端开发 开发者
使用 jquery 获取跨域数据| 学习笔记
快速学习使用 jquery 获取跨域数据。
212 0
|
JSON JavaScript 前端开发
jQuery 密码验证和深入理解JSONP【前端jQuery框架】
jQuery 密码验证和深入理解JSONP【前端jQuery框架】
jQuery 密码验证和深入理解JSONP【前端jQuery框架】
|
JavaScript
Ajax-20:Jquery发送jsonp请求
Ajax-20:Jquery发送jsonp请求
109 0
|
Web App开发 前端开发 JavaScript
杨老师课堂之Jquery的筛选,事件,效果,Ajax,javascript跨域)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/81940686 1 筛选[掌握]  筛选与之前“选择器”雷同,筛选提供函数 1.1 过滤 eq(index|-index),获取第N个元素 •index:一个整数,指示元素基于0的位置,这个元素的位置是从0算起。
1458 0