ajax如何解决跨域请求?解决ajax跨域问题

在实际项目中,我们经常会用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题。那ajax如何解决跨域请求?下面来我们就来给大家讲解一下。

1. 使用中间层过渡的方式(可以理解为“代理”):

中间过渡,很明显,就是在AJAX与不同域的服务器进行通讯的中间加一层过渡,这一层过渡可以是PHP、JSP、c++等任何具备网络通讯功能的语言,由中间层向不同域的服务器进行读取数据的操作。拿asp.net做一个例子,如果需要对不同域的某一个asp.net进行通讯,现在客户端的xmlhttprequest先query本域的一个asp.net ,然后由本域的这个asp.net去和不同域的asp.net进行通讯,然后由本域的asp.net响应输出(response);思路大概就是这样的,相信读者已经很清楚的理解了。

2. 使用<script>标签

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

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Ajax跨域问题</title>
    <script type="text/javascript" src="" id="getAspx">
    </script>
    <script type="text/javascript">
        function get(url) {
            var obj = document.getElementById("getAspx");
            obj.src = url;
            (obj.readStatus == 200)
            {
                alert(responseVal);//如果成功,会弹出Dylan
            }
        }
        function query() {
            get(getDemo.aspx);
        }
    </script>
</head>
<body>
<input type="button" value="Ajax跨域测试" onclick="query();"/>
</body>
</html>

getDemo.aspx后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace LearnJS
{
    public partial class getDemo: System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Write("var responseVal='Dylan'");
        }
    }
}
这个方法又叫做ajaj或者ajax without xmlHttprequest, 把x换成了j, 是因为使用了< script> 标签而没有用到xml和xmlHttprequest的缘故。 这种方法似乎有点“ 另类”, 哈哈。
那现在我们就看看, 有了jQuery之后, 如何来解决ajax的跨域问题:
    <
    html >
    <head>
<title>JQuery学习</title>
<script src="jquery-1.4.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
    var oBtnTest = $("#btnTest");
    oBtnTest.click(function(){
        oBtnTest.disabled = true;    
        var oResult = $("#result");
        oResult.html("loading").css("color","red");
        jQuery.getScript("https://www.jb51.net/test/js.txt", 
        function(){            
            oResult.html("name:" + Dylan.name + "<br/>email:" + Dylan.email).css("color","black");            
            oBtnTest.disabled = false;            
        });         
    });    
});    
/script> <
/head> <
body >
    <button id="btnTest">BtnTest</button> <
    div id = "result" > </div> <
    /body> <
    /html>

这个方法又叫做ajaj或者ajax without xmlHttprequest,把x换成了j,是因为使用了“btntest”。

如果大家遇到ajax跨域问题,可以按照以上的方法去解决,这样就不会再出现ajax跨域问题了。最后大家如果想要了解更多其他工具教程知识,敬请关注奇Q工具网。

推荐阅读:

手机怎么读取json格式文件?json文件打开的方式有哪些?

ajax如何实现同步?Ajax的同步和异步有什么区别?

零基础如何入门java?零基础要掌握哪些java知识?