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. 8.2.1.3 Range Optimization

    8.2.1.3 Range Optimization 范围访问方法使用一个单个的索引来检索表记录的自己,包含在一个或者索引值区间. 它可以用于一个单独的部分或者多个部分的索引,下面章节给出了一个详细的 ...

  2. 美国易安信公司 EMC

    EMC 提供了帮助您利用这一资产的工具.凭着我们的系统.软件.服务和解决方案,我们能够与您一道为您的公司打造一个综合性的信息基础架构.我们帮助客户设计.构建和管理智能.灵活而且安全的信息基础架构.这些 ...

  3. 170109、JSONP是什么

    一.JSONP的诞生 首先,因为ajax无法跨域,然后开发者就有所思考 其次,开发者发现, <script>标签的src属性是可以跨域的 把跨域服务器写成 调用本地的函数 ,回调数据回来不 ...

  4. Java 坦克小游戏心得

    原本是闲得慌无聊才去尝试做这个项目的,因为小时候玩小霸王的游戏机,那个时候经常玩这个游戏吧,特别是喜欢那种自定义地图的模式,觉得自由度非常不错.总之关于这个游戏,想说的一大堆.鉴于能有个空闲的时间,打 ...

  5. bug记录-setTimeout、setInterval之IOS7

    本篇文章主要讲查找并分析bug的思路,相关的函数不是本文的重点. 众所周知,setTimeout和setInterval是用来做延迟调用以及周期性调用的方法,他们支持的参数都差不多. setTimeo ...

  6. chkconfig(check config)命令

    功能说明:chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接.  语 法:chkconfig ...

  7. Fragment的生命周期&同一Activity下不同Fragment之间的通信

    Android开发:碎片Fragment完全解析(2) Fragment的生命周期 和Activity一样,Fragment也有自己的生命周期,理解Fragment的生命周期非常重要,我们通过代码的方 ...

  8. 导出Exexcl类

    前台: <%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation=" ...

  9. 32位PLSQL_Developer连接oracle11g_64位

    1. 请将你下载的instantclient-basic-win32-10.2.0.5 文件解压.然后复制到你的数据库安装的文件夹下的producti文件夹下,我的是: E:\app\Administ ...

  10. git 笔记记录

    分布式版本控制系统Git 是一套内容寻址文件系统,从核心上来看不过是简单地存储键值对.一: git 本地clone 一个仓库    1. 直接clone一个仓库:        $: git clon ...