http://dynamic.vip.xxxxxx.com/active/<controllers>/<active>/<id>
放在浏览器地址栏中访问可以得到正确的输出,但我一放到 AJAX 中去异步请求后用 FireBug 调试时确怎么都不出结果,和水龙兄一起调试了很久都没有发现是什么问题,由于这个URL对方的程序是用XX框架写的,我是第一次使用这个XX框架进行开发,对它不是很熟(有时间要研究一下它的内核源码),总以为是它什么地方有设置影响了的;就在我快要吐血时,乐锋(对这块比较了解的哥们)终于上线了,我把问题向他说下后,他第一反应就是:”你是不是跨域访问了。。”
OH FUCK,我和水龙一直研究程序逻辑,竟然忽视了自己的当前域名,因为我当前执行请求的域名是:
http://vip.xxxxxx.com/active1/index.html
问了一下乐锋,现系统中已提供的几个方案(函数)都不太令人满意或太烦琐了,和乐锋讨论了几种方案后,一时没有找到最好解决方案,一看时间,22:00了,天色已晚,不打扰他晚上陪老婆了!回到家里本想通过利用 iframe 来加载跨域的 url 来得到 dom 数据,研究后发现的想法太天真了,JS的安全策略跟本不允许我这样做;想通过 proxy 代理的方案,但想了一下,那比现在系统中所使用的方案更麻烦,详细研究了一下jQuery最新版关于跨域的解决方案后,终于让我研究出了一种非常方便的解决方案:
如下是代码示例:
—————— http://a.com/index.html ——————-

<script type="text/javascript" src="jquery-1.4.2.js"></script>
<script type="text/javascript">
/*
AJAX跨域问题完美解决方案
研究:袁维
启示:乐锋
*/
function jsonCallBack(url,callback)
{
$.getScript(url,function(){
callback(json);
});
}
function fun1()
{
jsonCallBack('http://b.com/b.php',function(json){
alert(json.message);
})
}
</ script>
<button type="button" onclick="fun1()">跨域访问</button>
—————— http://b.com/b.php ——————-

<?php
$ary = array('result'=>0,'message'=>'跨域成功');
$json = json_encode($ary);
//一定要这样定义输出最后的JSON数据,这是利用JS的闭包特性
echo "var json=$json;";
?>

该方案注意事项:
1:jQuery的版本必需大于 1.2版,否则不支持跨域处理
2:只支持 GET 方式的请求
2:请求的 URL 必需按如下例子中那样返回数据.
该方案注意利弊:
优点:
1:比用 iframe 加输出 parent.XXX() 的方案简单高效明了,前端处理更方便
2:相当 proxy 方式在编程上也简单多了
缺点:
1:必需使用jQuery,
2:返回的数据格式必需按示例样,当然不限于JSON,但它是处理最方便的.
(跨域服务器支持常规”?”查询请求的解决方案,利用JQuery的JSONP)
——————— http://b.com/index ———————-

<script src="jquery-1.4.2.js" type="text/javascript"></script>
<script type="text/javascript">
function fun1()
{
$.getJSON("http://a.com/c.php?no=10&msg=ok&format=json&jsoncallback=?",
function(data){
alert(data.msg);
});
}
</script>
<button type="button" onclick="fun1()">跨域处理</button>

 
——————– http://a.com/c.php ———————-

<?php
$no = $_GET['no'];
$msg = $_GET['msg'];
$json = json_encode(array('no'=>$no,'msg'=>$msg));
//必需以下这样输出
echo $_GET['jsoncallback'].'('.$json.')';

转载的别人的ajax跨域解决方法的更多相关文章

  1. ajax 跨域解决方法

    最近在开发过程中,使用ajax去异步调取图片.在开发中这个功能没什么问题,可以后来提测,重新部署之后就有问题了,这就是ajax的跨域问题. ajax核心对象XMLHttpRequest本身是不支持跨域 ...

  2. [转]vue跨域解决方法

      vue跨域解决方法 vue项目中,前端与后台进行数据请求或者提交的时候,如果后台没有设置跨域,前端本地调试代码的时候就会报“No 'Access-Control-Allow-Origin' hea ...

  3. ajax 跨域解决 网上资料

    PHP中运用jQuery的Ajax跨域调用实现代码,需要的朋友可以参考下   可以在页面定义一个调用方法,如下: 复制代码代码如下: function getData(){ $.getJSON(&qu ...

  4. PHP Ajax跨域解决

    PHP Ajax 跨域问题最佳解决方案 本文通过设置Access-Control-Allow-Origin来实现跨域. 例如:客户端的域名是client.runoob.com,而请求的域名是serve ...

  5. AJAX跨域问题解决方法(4)——调用方解决跨域

    调用方解决跨域的方法只有一种,那就是隐藏跨域. 何为隐藏跨域? 隐藏跨域的核心思路是通过反向代理隐藏跨域以欺骗浏览器 什么是反向代理?反向代理是指通过中间服务器使得访问同一个域名的两个不同url最终会 ...

  6. JavaScript跨域解决方法大全

    跨域的定义:JavaScript出于安全性考虑,同源策略机制对跨域访问做了限制.域仅仅是通过“URL的首部”字符串进行识别,“URL的首部”指window.location.protocol +win ...

  7. ASP.NET MVC 实现AJAX跨域请求方法《1》

    ASP.NET MVC 实现AJAX跨域请求的两种方法 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据 ...

  8. ajax原理和跨域解决方法

    ajax是异步的 JavaScript 和 XML.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 1--启动 ...

  9. 解决ajax跨域的方法原理详解之Cors方法

    1.神马是跨域(Cross Domain)   对于端口和协议的不同,只能通过后台来解决.   一句话:同一个ip.同一个网络协议.同一个端口,三者都满足就是同一个域,否则就是 跨域问题了.而为什么开 ...

随机推荐

  1. 五个新知识:微软SHA2补丁,亚信专业工具,微软官方文档,使用过期签名(附官方推荐链接),注意使用具有UAC的CMD

    五个新知识:微软SHA2补丁,亚信专业工具,微软官方文档,使用过期签名 不支持SHA2算法的计算机更新补丁:https://technet.microsoft.com/zh-CN/library/se ...

  2. live555的编译及使用

    live555是个流媒体C++开源库,VLC的Meida Player就使用了它的API完成的RTSP客户端,由于VLC的SDK没有提供相关record流到视频文件的API,所以我想用过live555 ...

  3. static在实例Extends、Overload中理解

    在写java程序的时候只在类内部调用的方法定义为private的是个很好的编程习惯.另外子类的static方法和父类有同名.同参数的static方法,但他们之间没什么覆盖.继承的关系,你调用的时候看是 ...

  4. ZOJ 2760 How Many Shortest Path

    题目大意:给定一个带权有向图G=(V, E)和源点s.汇点t,问s-t边不相交最短路最多有几条.(1 <= N <= 100) 题解:从源点汇点各跑一次Dij,然后对于每一条边(u,v)如 ...

  5. BZOJ3394: [Usaco2009 Jan]Best Spot 最佳牧场

    3394: [Usaco2009 Jan]Best Spot 最佳牧场 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 11  Solved: 9[Sub ...

  6. Node开发入门

    介绍 Node.js采用google的V8虚拟机来解释和执行javascript,也就是允许脱离浏览器环境运行javascript代码. Hello World 婴儿说的第一个字一般是"妈& ...

  7. Scala-变量、常量和懒加载

    package com.mengyao.scala.function /** * Scala的变量声明和使用(可变类型和值类型) *  * @author mengyao */object Test0 ...

  8. linux下常用FTP命令

    linux下常用FTP命令 1. 连接ftp服务器 1. 连接ftp服务器格式:ftp [hostname| ip-address]a)在linux命令行下输入: ftp 192.168.1.1b)服 ...

  9. js中的循环语句

    js中的循环语句可分为三种:1.while:2.do……while:3.for. while的语法为 while (exp) {    //statements;} var a=1,b=0; whil ...

  10. 【Python爬虫基础】抓取知乎页面所有图片

    抓取地址所有图片 #! /usr/bin/env python from urlparse import urlsplit from os.path import basename import ur ...