AJAX跨域问题的解决办法(以php为例)

最近公司内部的architecture组正在热烈讨论AJAX,最后难免会谈到如何跨域这个问题,因为从AJAX 诞生那天起,XMLHttprequest对象在firefox下不能跨域请求的问题就一直存在,等待浏览器们去解决这 个问题显然不太现实,聪明的Web开发人员们早就想了一系列的方法来解决这个问题,下面列举两个比较 不错的方法:

1. 使用中间层过渡的方式:

中间过渡,很明显,就是在AJAX与不同域的服务器进行通讯的中间加一层过渡,这一层过渡可以是PHP 、JSP、c++等任何具备网络通讯功能的语言,由中间层向不同域的服务器进行读取数据的操作。拿PHP做 一个例子,如果需要对不同域的某一个php进行通讯,现在客户端的xmlhttprequest先query本域的一个 PHP,然后由本域的这个PHP去和不同域的PHP进行通讯,然后由本域的PHP输出response;

2. 使用<script>标签

这个方法是利用<script>标签中的src来query一个PHP获得response,因为<script>标签 的src属性不存在跨域的问题。

举个例子来让大家看得更清楚一点吧:

<script LANGUAGE="Javascript" src="" id="get">
</script>
<script LANGUAGE="Javascript">
<!--
function get(url)
{
var obj = document.getElementById("get");
obj.src = url;
(obj.readStatus == 200)
{
alert(param);
}
}
function query()
{
get(get.php);
}
//-->
</script>
<BODY>
<INPUT TYPE="button" value="CLICK ME" onclick="query() ">
</BODY>
</HTML>

其中get.php的代码是:

<?php
echo "var param = 'www.achome.cn'";
?>

最后的运行结果是,当你点击那个button,它会出现一个内容为”www.achome.cn”的对话 框。

这个方法又叫做ajaj或者ajax without xmlHttprequest,把x换成了j,是因为使用了<script> 标签而没有用到xml和xmlHttprequest的缘故。

怎么样,很简单吧,我看到过很多人不愿意去正视ajax所存在的技术瓶颈,其实AJAX更应该是Ajax而 不是AJAX,突出第一个A是想强调其实AJAX发扬的是一种异步传输的方法,而不是具体到底使用了哪种技 术。

时间: 2024-12-05 12:12:33

AJAX跨域问题的解决办法(以php为例)的相关文章

Ajax跨域问题的解决办法汇总(推荐)_AJAX相关

本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道是跨域问题不知道如何解决,再到解决跨域问题,最后找到两种方法解决ajax 跨域问题的全过程. 不知是跨域问题 起 因是这样的,为了复用,减少重复开发,单独开发了一个用户权限管理系统,共其他系统获取认证与授权信息,暂且称之为A系统:调用A系统以B为例.在B系统 中用ajax调用A系统系统的接口(数据格式为json),当时特别困惑,在A系统中访问相应的url可正常回返json数据,但是在B系统中使用 ajax请求同样的url则一点儿反应都没有,好像

Ajax跨域问题的解决办法汇总(推荐)

本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道是跨域问题不知道如何解决,再到解决跨域问题,最后找到两种方法解决ajax 跨域问题的全过程. 不知是跨域问题 起 因是这样的,为了复用,减少重复开发,单独开发了一个用户权限管理系统,共其他系统获取认证与授权信息,暂且称之为A系统:调用A系统以B为例.在B系统 中用ajax调用A系统系统的接口(数据格式为json),当时特别困惑,在A系统中访问相应的url可正常回返json数据,但是在B系统中使用 ajax请求同样的url则一点儿反应都没有,好像

PHP简单实现HTTP和HTTPS跨域共享session解决办法

  这篇文章主要介绍了PHP简单实现HTTP和HTTPS跨域共享session解决办法,本文讲解的方法相对简单,需要的朋友可以参考下 HTTP.HTTPS协议下session共享解决cookie失效 的办法:(也许不是最好的,但是实用) 原理就是把session id设置到本地的cookie, 代码如下: $currentSessionID = session_id(); session_id($currentSessionID ); 简单事例代码: (HTTP) 代码如下: session_s

JavaScript跨域总结与解决办法

什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象.更详细的说明可以看下表: 特别注意两点: 第一,如果是协议和端口造成的跨域问题"前台"是无能为力的, 第二:在跨域问题上,域仅仅是通过"U

Ajax跨域查询完美解决通过$.getJSON()实现

原因:浏览器安全上做了限制,禁止ajax跨域获得数据. 解决方法:通过jquery提供的$.getJSON()可以跨域获得JSON格式的数据.优点:兼容性强. Java后台代码: 复制代码 代码如下: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String callback =req.getParameter("cal

IE9版本以下ajax 跨域问题可行解决方法_AJAX相关

ajax跨域请求数据在谷歌火狐我本地IE11都是没问题的. 让测试就发现问题了,IE8下请求不到数据,然后我查看一下自己写的js看有没有不兼容问题,可是都没有啊,为什么就请求不到呢. 我把ajax的error打印出来提示no transport,网上找了资料在js中第一行加这个就可以了jQuery.support.cors = true; 好了这个问题没有了,可是又有另一个error没有权限.这个问题百度了好多都没有我想要的,最后看了一篇文章让我豁然开朗这是IE浏览器的安全性设置问题, 解决方法

IE9版本以下ajax 跨域问题可行解决方法

ajax跨域请求数据在谷歌火狐我本地IE11都是没问题的. 让测试就发现问题了,IE8下请求不到数据,然后我查看一下自己写的js看有没有不兼容问题,可是都没有啊,为什么就请求不到呢. 我把ajax的error打印出来提示no transport,网上找了资料在js中第一行加这个就可以了jQuery.support.cors = true; 好了这个问题没有了,可是又有另一个error没有权限.这个问题百度了好多都没有我想要的,最后看了一篇文章让我豁然开朗这是IE浏览器的安全性设置问题, 解决方法

HTTP和HTTPS跨域共享session解决办法

HTTP.HTTPS协议下跨域解决session共享的办法,也许不是最好的,但是比较实用.如下是具体的解决方案. $currentSessionID=session_id(); session_id($currentSessionID); 简单示例代码: (HTTP) <?php session_start(); $currentSessionID=session_id(); $_SESSION['username']='Alixixi'; echo '<a href="https:

PHP简单实现HTTP和HTTPS跨域共享session解决办法_php实例

HTTP.HTTPS协议下session共享解决cookie失效 的办法:(也许不是最好的,但是实用) 原理就是把session id设置到本地的cookie, 复制代码 代码如下: $currentSessionID = session_id(); session_id($currentSessionID ); 简单事例代码: (HTTP) 复制代码 代码如下: session_start();  $currentSessionID = session_id();  $_SESSION['te