zoukankan      html  css  js  c++  java
  • 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#,却试图用不擅长的技术去解决连擅长的人都难以解决的问题,或者说....没办法解决。

  • 相关阅读:
    NOIP200304麦森数
    NOIP201103瑞士轮
    NOIP200406合并果子
    Dijkstra堆优化与SPFA模板
    BZOJ1095: [ZJOI2007]Hide 捉迷藏
    NOIP201307货车运输
    hdu2062(递推)
    hdu1260(dp)
    hdu1158(dp)
    hdu1059(多重背包)
  • 原文地址:https://www.cnblogs.com/jiangkun/p/JQuery_getJSON_JsonCallBack.html
Copyright © 2011-2022 走看看