JQuery - Ajax和Tomcat跨域请求问题解决方法!

在JQuery里面使用Ajax和Tomcat服务器之间进行数据交互,遇到了跨域请求问题,无法成功得到想要的数据!

错误信息部分截图:

通过错误信息判断知道已经发生在Ajax跨域请求问题了!

当前Tomcat服务器,是一个已经存在的工程,有APP同这部分代码一同工作。我所做的是开发另外一款手机应用程序,并且使用已有的接口!在这种情况下,实现Ajax跨域请求,而且对目前源代码影响越小越好!怎样达到这样的目标?最终通过为Tomcat添加过滤器方式完成!

由于此项目是商业项目,服务器并不是我管理,所以无法提供具体代码和截图,具体实现根据下面这篇文章:

https://blog.csdn.net/appppppen/article/details/73196448

对于不了解JAVA开发朋友,可以通过下面文章了解一下Tomcat的过滤器:

http://www.runoob.com/servlet/servlet-writing-filters.html

最终,在服务器上面配置好过滤器,客户端通过JQuery Ajax可以和服务器交互数据了,下面是获取数据的部分截图:

我的JQuery Ajax页面代码:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>JQuery跨域解决方法</title>
    <script src="js/common.js"></script>
    <script src="js/jquery-2.1.4.min.js"></script>
</head>

<script language="JavaScript">

    $(document).ready(function () {

        $("#submit").unbind("click").bind("click", function (e) {
            e.preventDefault();

            $.ajax({
                url: "请求数据网址",
                type: "post",

                data: $("#form1").serialize(),//要提交数据
                //另外一种提交数据方式,有的时候应该有用处
                // data: {
                //     ‘参数名称‘: ‘参数值‘
                // },

                dataType: "json",//从服务器返回数据类型
                beforeSend: function (request) {
                    //发送请求前调用的函数,需要配置可以在这里做
                },
                success: DoAjaxSuccess,
                error: DoAjaxError,
                complete: DoComplete
            })

            //Ajax执行成功后调用的函数
            function DoAjaxSuccess(data, status, jqxhr) {

                //得到返回的数据
                var responseText = jqxhr.responseText;

                //解析JSON数据
                $.parseJSON(responseText);

                //在Chrome浏览器控制台打印信息
                console.log(responseText);

                //在页面显示得到的数据
                $("#ajax-responseData").html(responseText);

                //恢复默认错误信息
                $("#ajax-error").html("错误信息:");
            }

            //Ajax执行失败后调用的函数
            function DoAjaxError(jqxhr, status, errorMsg) {
                //在页面显示错误信息
                $("#ajax-error").html("错误信息:" + errorMsg);
            }

            //Ajax执行完毕后调用的函数
            function DoComplete(jqxhr, status) {
                //在页面显示完成状态
                $("#ajax-status").html("完成状态:" + status);

                //操作时间
                var curTime = GetCurTime();
                $("#ajax-responseTime").html(curTime);
            }

        });
    })

</script>

<body>
<form id="form1" name="form1" method="post" action="#">
    <table width="100%" border="1">
        <tbody>
        <tr>
            <td>
                <table width="100%" border="0">
                    <tbody>
                    <tr>
                        <td width="7%">服务器:Tomcat</td>
                    </tr>
                    </tbody>
                </table>
            </td>
        </tr>
        <tr>
            <td>
                <table width="100%" border="1">
                    <tbody>
                    <tr>
                        <td width="67%">
                            <table width="100%" border="1">
                                <tbody>
                                <tr>
                                    <td><label for="tel">电话:</label>
                                        <input name="tel" type="text" id="tel" value=""></td>
                                </tr>
                                <tr>
                                    <td><label for="pwd">密码:</label>
                                        <input name="pwd" type="text" id="pwd" value=""></td>
                                </tr>
                                </tbody>
                            </table>
                        </td>
                        <td width="33%"><input type="submit" name="submit" id="submit" value="提交"></td>
                    </tr>
                    </tbody>
                </table>
            </td>
        </tr>
        <tr>
            <td>操作时间:<a style="color: red" id="ajax-responseTime">&nbsp;</a></td>
        </tr>
        <tr>
            <td id="ajax-status">完成状态:</td>
        </tr>
        <tr>
            <td id="ajax-error">错误信息:</td>
        </tr>
        <tr>
            <td id="ajax-responseData">&nbsp;</td>
        </tr>
        </tbody>
    </table>
</form>
</body>
</html>

注意:得到返回JSON数据,在Ajax执行成功回调函数中,具体代码是:

            //Ajax执行成功后调用的函数
            function DoAjaxSuccess(data, status, jqxhr) {

                //得到返回的JSON数据
                var responseText = jqxhr.responseText;

                //解析JSON数据
                $.parseJSON(responseText);

                //在Chrome浏览器控制台打印信息
                console.log(responseText);

                //在页面显示得到的数据
                $("#ajax-responseData").html(responseText);

                //恢复默认错误信息
                $("#ajax-error").html("错误信息:");
            }

common.js代码:这是上面文件里面引用的一个提供一些功能的JS文件

//补齐两位数
function padleft0(obj) {
    return obj.toString().replace(/^[0-9]{1}$/, "0" + obj);
}

//得到当天日期
function GetCurTime() {
    var nowtime = new Date();
    var year = nowtime.getFullYear();
    var month = padleft0(nowtime.getMonth() + 1);
    var day = padleft0(nowtime.getDate());
    var hour = padleft0(nowtime.getHours());
    var minute = padleft0(nowtime.getMinutes());
    var second = padleft0(nowtime.getSeconds());
    var millisecond = nowtime.getMilliseconds();
    millisecond = millisecond.toString().length == 1 ? "00" + millisecond : millisecond.toString().length == 2 ? "0" + millisecond : millisecond;
    return year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second + "." + millisecond;
}

原文地址:https://www.cnblogs.com/sunylat/p/9706507.html

时间: 2024-08-07 06:00:35

JQuery - Ajax和Tomcat跨域请求问题解决方法!的相关文章

jquery ajax GET POST 跨域请求实现

同一段逻辑代码需要在多个网站中使用, 每个网站都新建一个ashx真是扯蛋的作法,  所以想只请求一处的ashx, 这样便于维护和修改, 那么,ajax跨域问题就来了. 废话少说, 直接上代码,  我现在做的是GET请求的. POST请求同理. 首先整改ashx,加入支持跨域请求的代码. context.Response.ContentType = "text/plain"; string active = context.Request.QueryString["active

jQuery 跨域访问问题解决方法

浏览器端跨域访问一直是个问题, 多数研发人员对待js的态度都是好了伤疤忘了疼,所以病发的时候,时不时地都要疼上一疼.记得很久以前使用iframe 加script domain 声明,yahoo js util 的方式解决二级域名跨域访问的问题. 时间过得好快,又被拉回js战场时, 跨域问题这个伤疤又开疼了. 好在,有jquery帮忙,跨域问题似乎没那么难缠了.这次也借此机会对跨域问题来给刨根问底,结合实际的开发项目,查阅了相关资料,算是解决了跨域问题..有必要记下来备忘. 跨域的安全限制都是指浏

PHP AJAX JSONP实现跨域请求使用实例

在之前我写过“php返回json数据简单实例”,“php返回json数据中文显示的问题”和“在PHP语言中使用JSON和将json还原成数组”.有兴趣的童鞋可以看看 今天我写的是PHP AJAX JSONP使用的实例.不清楚jsonp是什么的请自己搜索 实例1 test.html <!doctype html> <html> <head> <meta charset="utf-8"> <title>test</title

tomcat跨域请求

tomcat A请求tomcat B中的数据(本人是在同一台机器上2个tomcat端口不同,在不同机器上有时间会测得) 博主用的是ajax请求 在A 请求B中数据,用下面的方法可以 在被请求的tomcat B 应用的web.xml中加入如下代码: 在tomcat B 应用中加入如下jar: cors-filter-1.7.jar:  java-property-utils-1.9.jar <!-- tomcat跨域请求开始 --> <filter> <filter-name&

js中ajax如何解决跨域请求

js中ajax如何解决跨域请求,在讲这个问题之前先解释几个名词 1.跨域请求 所有的浏览器都是同源策略,这个策略能保证页面脚本资源和cookie安全 ,浏览器隔离了来自不同源的请求,防上跨域不安全的操作. 跨域指的协议.域名.端口 有一个不同的情况下都是跨域 例:在本站点请求外站的数据是不允许的 //在本站点请求外站点的资源是不允许的 $(function () { $.ajax({ url: "http://127.0.0.1:14847/Web/jsonp.js", success

Access to XMLHttpRequest at &#39;XXX&#39; from origin &#39;XX&#39; has been blocked by CORS policy: No &#39;Access-Control-Allow-Origin&#39; header is present o AJAX跨域请求解决方法

今天出现了一个问题找了好久先看代码: 这可能是个BUG吧插入代码: dataType: 'jsonp', crossDomain: true, 最终: Access to XMLHttpRequest at 'XXX' from origin 'XX' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present o AJAX跨域请求解决方法 原文地址:https://www.cnblogs

web三种跨域请求数据方法

web三种跨域请求数据方法 以下测试代码使用php,浏览器测试使用IE9,chrome,firefox,safari <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.

Nginx反向代理、CORS、JSONP等跨域请求解决方法总结

由于 Javascript 同源策略的存在使得一个源中加载来自其它源中资源的行为受到了限制.即会出现跨域请求禁止. 通俗一点说就是如果存在协议.域名.端口或者子域名不同服务端,或一者为IP地址,一者为域名地址(在跨域问题上,域仅仅是通过“ url的首部 ”来识别而不会去尝试判断相同的IP地址对应着两个域或者两个域是否同属同一个IP),之中任意服务端旗下的客户端发起请求其它服务端资源的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源. 但很多时候我们却又不得不

js Jquery 跨域请求问题解决

Chrome报错:跨域问题处理( Access-Control-Allow-Origin)_ 用于本地测试的快捷解决方法 报错提示如下: XMLHttpRequest cannot load http://www.xxxx.com/264/Data/GetScreenInfo. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not a