问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用ajax怎么解决跨域的问题?

发布网友 发布时间:2022-04-27 13:24

我来回答

2个回答

热心网友 时间:2022-04-06 07:08

解决的办法,有如下几种:

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("http://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>

远程服务器端js.txt中的内容为:
var Dylan= {name:"Dylan",email:Dylan@163.com}

热心网友 时间:2022-04-06 08:26

一般是用jsonp,原理很简单,比如在A域名请求B域名:
1.在A域名的页面中使用script标签src写成B域名中服务器的URL
script标签是可以跨域的,比如调用GoogleMap或GoogleAnalytics时引入的js就是google域名下的。
2.后端程序在最后需要把一段js代码的字符串print出来,这样就可以运行A域名js中写好的callback方法,将要返回的数据放入参数就可以了。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 使用jquery的ajax的jsonp类型跨域请求数据、始终获取不到返回数据呢_百... 原生js实现ajax封装好怎么使用 ajax怎么实现跨域 Ajax为什么能解决跨域 薏米炒后还能去湿气吗 听说薏米可以去湿气,那是要炒还是直接去超市买来泡热水喝? 薏米除湿需要炒吗′ 薏米除湿气需要炒熟吗 湿气重薏米需要炒熟吗 薏米祛湿用炒吗 weverse shop怎么退款 婚内出轨怎样判刑 婚内出轨有什么处罚 婚内出轨法律怎么处理? 有道云笔记iPad版能分享微博或朋友圈吗? ipad版 新浪微博怎么发送长微博啊,求解啊 ipad版的找你妹怎么分享到微博? ipad和手机能同步上微博吗? ipad上的微博为什么不能分享到微信?求解 用iPad蹬新浪微博,可以转发到微信里面吗? javascript开发中jsonp跨域请求是什么意思?什么叫跨域?为什么用jsonp... jsonp跨域是通过js实现的吗 如何实现跨域?jsonp实现原理 jquery php ajax jsonp 跨域的问题 jsonp跨域请求怎么设 如何使用jsonp解决跨域问题 ajax跨域请求jsonp出现Uncaught SyntaxError,该如何解决? 想了解jsonp,怎么学习啊 什么是js的同源策略,jsonp跨域请求什么意思 JSONP怎样实现跨域 如何快速的练成六块腹肌? 怎样才能锻炼出六块腹肌? 六块腹肌怎么练 怎么练六块腹肌 六块腹肌怎么练成 离婚后发现对方婚内出轨怎么办? 离婚后发现对方婚内出轨,可以起诉吗 离婚后知道对方婚内出轨怎么办 离婚后,发现婚姻有效期内,男方有外遇,可以起诉吗? 离婚三年后发现对方婚内出轨,是否可以重新起诉并且要求分割财产