jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token
引言
ajax跨域就无法成功获取数据了,需要通过jsonp来处理
报错如下

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数据
报错如下

2.需要后台处理
原输出格式
protected function printOut() {
exit(json_encode($this->outData));
}
改为新的格式,加上一个callback
protected function printJsonp() {
exit($_GET['callback']."(".json_encode($this->outData).")");
}
在XHR中并不能看到

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

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));
}
}
jQuery中jsonp的跨域处理,no access-control-allow-origin,unexpected token的更多相关文章
- 详解Jquery和AngularJs,Servlet中jsonp解决跨域问题(转)
众所周知,jsonp可以解决跨域问题,下面是我在查阅资料和实际项目使用后的一些总结. Jquery中jsonp的使用 //myUrl = "http://localhost:8090/api ...
- jquery中ajax处理跨域的三大方式
一.处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问.但ie10以下不支持 只需要在服务端填上响应头: ? 1 2 ...
- jquery使用jsonp进行跨域调用
关于JSONP的概念和为什么要使用JSONP网上已经有很多教程,这一节主要演示下在JQUERY中的ajax方法怎样通过JSONP进行远程调用 首先介绍下$.ajax的参数 type:请求方式 GET/ ...
- C# WebClient、jQuery ajax jsonp实现跨域
WebClient 无传输数据获取 Uri uri = new Uri(allURL); WebClient wc = new WebClient(); wc.Encoding = System.Te ...
- php中jsonp的跨域实例
我们现在www.test.com这个域名下面有这么个html文件testjsonp.html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...
- 利用jquery的ajax实现跨域,内部其实是jsonp协议了,不是XHRhttp协议
一.同源策略 要理解跨域,先要了解一下“同源策略”.所谓同源是指,域名,协议,端口相同.所谓“同源策略“,简单的说就是基于安全考虑,当前域不能访问其他域的东西. 一些常见的是否同源示例可参照下表: 在 ...
- jquery 中jsonp的实现原理
在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,即一般的 ajax是不能进行跨域请求的.但 img.iframe .script等标签是个例外,这些标签可以通过 src属性请求到其 ...
- JS、JQuery和ExtJs的跨域处理
1.什么是跨域?跨域,JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a. ...
- JSONP实现跨域
首先提出:什么是跨域?如何解决跨域? 跨域可以简单的理解为从一个域名访问另一个域名,由于javascript的同源政策的限制,出于安全的考虑,不允许浏览器这么做.比如a.com 域名下的js无法操作b ...
随机推荐
- SQL Server CPU时间和占用时间及优化
如何测试sql语句执行时间 在MSSQL Server中通过查看SQL语句执行所用的时间,来衡量SQL语句的性能. set statistics profile on set statistics i ...
- C# this.Hide()
C# this.Hide() 第一次用的时候是在_Load函数里: BookSystem bs = new BookSystem(); bs.ShowDialog(); ...
- Android开发--用户定位服务--UserLocation
Android开发--用户定位服务--UserLocation 2013-01-28 08:32:26 我来说两句 作者:BruceZhang 收藏 我要投稿 [java] & ...
- win7之64位下安装oracle11g遇到问题和不能删除干净的问题
今天在win7下装了oracle11g 删了又卸 来来回回重启了4.5次,结合网上是解释归纳下几点: 一.win64_11gR2_database_1of2.zip和win64_11gR2_datab ...
- 算法笔记_114:等额本金(Java)
1 等额本金 标题:等额本金 小明从银行贷款3万元.约定分24个月,以等额本金方式还款. 这种还款方式就是把贷款额度等分到24个月.每个月除了要还固定的本金外,还要还贷款余额在一个月 中产生的利息. ...
- 苹果通知推送服务(APNS)关键特性摘要
1. If APNs attempts to deliver a notification but the device is offline, the notification is stored ...
- 【php】模板页面展示复选框已选中选项和数据
写在最开始: 2)我们这里流程是编辑.修改 已经存储的数据. 1.[修改]功能页面: 2.代码:HTML <dt>民宿设施</dt> <dd><label&g ...
- sql 中 ALTER 和 UPDATE 的区别
alter 是DDL语句,是修改数据库中对象(表,数据库,视图..)的语句. 如需在表中添加列,请使用下面的语法: ALTER TABLE table_name ADD column_name dat ...
- 整站下载工具Teleport Pro
http://zmingcx.com/download-tools-teleport-pro-full-stop.html Teleport Pro是一款功能强大的离线浏览器,不论规模多大的网站,只要 ...
- java基础讲解12-----Swing
package com.swing; import java.awt.*; import javax.swing.*; public class Swing01 extends JFrame{ /* ...