JQuery的getJSON函数跨域
由于一开始看到“$”等类似符号就头晕,所以注定与PHP和JQuery无缘了,不过自己用JavaScript可不代表其他人也得用,这不,麻烦到了...
两个网站:A、B
A站点提供了一个重要的API,由于种种原因,虽然是同一家公司,但原来的代码是不允许任何修改的,原来也没有考虑到后面有其他的站点需要调用;
B站点的域名跟A完全不一样,但业务需要,必须拿到A站那个API的返回结果,并且为保证该API数据的准确性,必须是客户端去请求。
解决方法:
API地址:http://domain.com:8080/Site/getIp
修改为:http://domain.com:8080/Site/getIp/?jsoncallback=?
执行原理(万能的度娘给出的答案):
发送请求时需要传一个callback的回调函数名到服务器端,服务器端拿到这个回调函数名,再将返回数据用参数的形式反回到客户端,这样客户端就能够调到。
所以发送请求URL的地址后面一定要上jsoncallback=?这样的参数,jquery会将?号自动替换成自动生成的回调函数的名称。
所以最终的实际请求为:http://domain.com:8080/Site/getIp/?jsoncallback=jsonp1322444422697
所以和ajax的方式想比较,也就是callback函数一个是自动生成的函数名,一个是手工指定的函数名。
就这么愉快的解决了?
的确,在客户端刷新看了一下,http://domain.com:8080/Site/getIp/?jsoncallback=?的返回状态码的确是200,getJSON的回调函数仍然不执行。到网上查了一下,发现我这里有一个条件不满足:后台需要返回一个回调函数,名称与jsoncallback=?中的?一样;要么就返回标准的JSONP格式,我对JSON的格式并没有太了解过,在百度了N次后知道,http://domain.com:8080/Site/getIp返回的文本内容中,少了[]这个中括号,当然至于问题的原因我也不知道,由于对主站并没有控制权,所以也并没有尝试过,不知道是否加上[]中括号就是否可行。
浪费了几个小时的时间,最后把主站API中的数据拿出来,到百度去搜,发现主站提供的API里面的大部分数据是淘宝那边的,所以自己根据主站API的格式重新写了个API,问题终于解决了。
总结一下,虽然这篇文章对前台的技术几乎没有任何帮助,不过至少我算是知道了:选择最适合自己的技术,以最少的时间解决问题,千万不要像我一样,相比JAVASCRIPT更擅长C#,却试图用不擅长的技术去解决连擅长的人都难以解决的问题,或者说....没办法解决。
JQuery的getJSON函数跨域的更多相关文章
- 用JQuery的$.getJSON发起跨域Ajax请求
jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数.原型如下: jQuery.getJSON( url, [data], [callba ...
- jQuery 利用 $.getJson() 实现跨域
数据量不大时,跨域的不二之选,而且操作简单,易上手. a.com/test.html //这里我假定有一些数据: var formData = form.serialize(); //这里的jsonc ...
- 利用jquery的ajax实现跨域,内部其实是jsonp协议了,不是XHRhttp协议
一.同源策略 要理解跨域,先要了解一下“同源策略”.所谓同源是指,域名,协议,端口相同.所谓“同源策略“,简单的说就是基于安全考虑,当前域不能访问其他域的东西. 一些常见的是否同源示例可参照下表: 在 ...
- JS、JQuery和ExtJs的跨域处理
1.什么是跨域?跨域,JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a. ...
- jQuery之ajax的跨域获取数据
如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务 ...
- jQuery的Ajax的跨域请求
今天碰到一个Ajax跨域请求的问题,我把源码down下来,然后在服务器端写了一个http请求的代理(因为服务器端是不存在跨域问题的),说白了就是用BufferedReader写了个IO流,然后读取到目 ...
- (转)jquery ajax使用及跨域访问解决办法
原文地址:***/UIweb/jquery_ajax_kuayujiejue.html 最近开发中,设计到智能手机项目,给领导做几个demo.主要是用jquery和jqeury mobile. 越来越 ...
- 使用$.getJSON实现跨域ajax请求
jQuery中常用getJSON来调用并获取远程的JSON字符串,将其转换为JSON对象,如果成功,则执行回调函数.原型如下: jQuery.getJSON( url, [data], [callba ...
- jquery中ajax处理跨域的三大方式
一.处理跨域的方式: 1.代理 2.XHR2 HTML5中提供的XMLHTTPREQUEST Level2(及XHR2)已经实现了跨域访问.但ie10以下不支持 只需要在服务端填上响应头: ? 1 2 ...
随机推荐
- 724_Find-Pivot-Index
目录 724_Find-Pivot-Index Description Solution Java solution Python solution 724_Find-Pivot-Index Desc ...
- WCF-绑定模型(一)
一.利用BasicHttpBinding实现消息通信 WCF基础架构由服务模型层和信道层构成,而绑定是两层直接的纽带.绑定创建了处理消息的信道栈,实现消息的传输和处理.在绑定模型中涉及很多通信对象,信 ...
- Gauva的安装——入门篇
Guava工程包含了若干被Google的 Java项目广泛依赖 的核心库,例如:集合 [collections] .缓存 [caching] .原生类型支持 [primitives support] ...
- c#参数修饰符-out
out 关键字通过引用传递参数. 方法定义和调用方法必须显式使用out关键字: 调用方法时参数不必初始化,方法内必须对其赋值: 参数中可以声明多个out修饰的参数. 例: public void Us ...
- 用jquery把一个List里面的对象的属性,依次填入到一个table里面啊
假设list格式如下list = [{"id":"1","name":"A","age":20}, ...
- linux的日常经常使用的命令
现在经常用到linux命令,又时候回忘记,我就做个小笔记,大家也可以补充补充.....可以评论一下,我会截图做笔记的 netstat -ntlp //查看当前系统进程和端口等信息 tail -f fi ...
- SpringBoot管理Banner
一.引言 在springboot项目启动的时候,会在console控制台中打印出一个SPRING的图案.有时候为了减少日志输出以及控制台的输出,就需要将这些给去除:有时候需要换上个人的标签等标识,就需 ...
- 手把手教你写一个RPC
1.1 RPC 是什么 定义:RPC(Remote Procedure Call Protocol)--远程过程调用协议 ,RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数 ...
- 零基础学python习题 - 进入python的世界
1. python拥有以下特性:面向对象的特性.动态性.内置的数据结构.简单性.健壮性.跨平台性.可扩展性.强类型语言.应用广泛 2. python 需要 编译 3. 以下不属于python内置数据 ...
- webpack打包踩坑之TypeError: Cannot read property 'bindings' of null
file loader介绍:https://www.webpackjs.com/loaders/file-loader/ babel loader介绍:https://webpack.js.org/l ...