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 ...
随机推荐
- P2P 行业解决方案
P2P指个人与个人之间的借贷,而P2P理财是指以公司为中介机构,把这借贷双方对接起来实现各自的借贷需求.借款方可以是无抵押贷款或是有抵押贷款.而中介一般是收取双方或单方的手续费为盈利目的或者是赚取一定 ...
- 分层 DAO层,Service层,Controller层、View层
前部分摘录自:http://blog.csdn.net/zdwzzu2006/article/details/6053006 DAO层:DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务 ...
- 八段代码彻底掌握 Promise
1.Promise的立即执行性 var p = new Promise(function(resolve, reject){ console.log("create a promise&qu ...
- android 源码编译及其运行模拟器相关问题记录
最近一直在看android源码相关的文档,包括编译源码,还有framework层的代码,本人很懒,一直没有写博客,今天想自己在编译一下源码,并且运行在模拟器中. 源码的版本不同,需要的jdk可能也有所 ...
- C#读取MySql表字段出现System.Byte[]问题
记录下,用了多字段拼接后在程序中查询出的结果为System.Byte[],而在数据库中查正常 解决办法为:加Convert转换编码 select CONVERT((CASE background ...
- springboot手动配置数据源:
@Configuration @EnableTransactionManagement @PropertySource(value = {"classpath:config/source.p ...
- Server 2008 r2 多用户远程桌面配置
参考资料链接: http://blog.163.com/fan_yishan/blog/static/476922132013018594951/ 按照以上链接的博文一步步进行配置,因为我是英文操作系 ...
- jquery replace方法去空格
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- javascript 获取服务时间
用到了jquery的ajax方法,ajax自己写也可以. 具体用法 var setId = setInterval(function(){ var xhr = $.ajax({ type: 'HEAD ...
- JMeter测试WEB性能入门
一.JMeter介绍 1.Apache JMeter是什么 Apache JMeter 是Apache组织的开放源代码项目,是一个100%纯Java桌面应用,用于压力测试和性能测量.它最初被设计用于W ...