2 crystalyh22 Crystalyh22 于 2017.01.12 16:00 提问

javascript发送网络请求,访问服务器报错

这是错误信息:"XMLHttpRequest cannot load http://125.135.136.111/testApp/login.jsp. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8020' is therefore not allowed access."
因为第一次写web项目,不是很懂。。请各位指教,谢谢!
我想请问创建web项目时,是不是要设置服务器端口?怎么设置呢?默认的是http://127.0.0.1:8020这个端口,可不可以更改?
这是js中的代码:

$(function(){
$('#login_btn').click(function(){
var pwdRegex = /^\w{6,20}/; //密码正则
if($('#username').val() == ''){
window.alert("请输入用户名!");
$('#email').focus();
}else if($('#password').val() == ''){
window.alert("请输入密码!");
$('#password').focus();
}else if(!pwdRegex.test($('#password').val())){
window.alert("密码不正确!");
$('#password').focus();
}else{
window.alert("登录中...");

                // 创建XMLHttpRequest对象
                var xmlhttp;
                if (window.XMLHttpRequest){
                    xmlhttp=new XMLHttpRequest();
                }else{
                    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
                xmlhttp.onreadystatechange = function(){
                    if (xmlhttp.readyState==4 && xmlhttp.status==200){
                        window.alert(xmlhttp.responseText);
                    }
                }
                xmlhttp.open("GET", "http://125.138.147.111/testApp/login.jsp", true);
                xmlhttp.send();
            }
        });
});

9个回答

qq_26625037
qq_26625037   2017.01.12 16:21

是的,没有指定端口,创建Web项目不需要设置端口,如果需要修改可以在tomcat目录下 conf/server.xml中修改默认是8080,你的是8020就在server.xml中找到8020修改之后重启tomcat。
如果你是外网访问需要查看访问地址通不通,如125.135.136.111有没有开放8020端口,测试基本在本地测试直接写127.0.0.1:8020/项目名...
不过你这访问的是页面吧...

qq_26625037
qq_26625037 "http://125.138.147.111/testApp/login.jsp"这个是访问的页面,还有加上端口如"http://125.138.147.1118020/testApp/login.jsp"
11 个月之前 回复
Crystalyh22
Crystalyh22 回复代码界的小学生: 代码已经更新出来了,那我现在的代码对吗?
11 个月之前 回复
qq_26625037
qq_26625037 回复Crystalyh22: XMLHttpRequest 发送数据到后台Servlet接收进行处理,返回页面login.jsp.
11 个月之前 回复
Crystalyh22
Crystalyh22 我其实就是想要在一个网页上输入用户名和密码,然后连接服务器进行登录,请问需要服务器那边做什么吗?
11 个月之前 回复
welan123123
welan123123   2017.01.12 16:33

你这应该是需要自动获取基本地址的,代码如下:

 <%
String basePath = request.getContextPath();
%>

basePath可能等于http://127.0.0.1:8020,接下来就加一些固定的路径
这样你将来部署的时候就不用改代码了

Crystalyh22
Crystalyh22 还有请问你这句代码加在哪个位置呢?谢谢
11 个月之前 回复
Crystalyh22
Crystalyh22 代码已经更新出来,请问我这样写对吗
11 个月之前 回复
m0_37285193
m0_37285193   2017.01.12 16:51

是不是没加头

 xhr.setRequestHeader("Content-type","application/json");
Crystalyh22
Crystalyh22 这个加进去有问题:"Uncaught InvalidStateError: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED."
11 个月之前 回复
xiajingyc
xiajingyc   2017.01.12 17:03

看情况应该是跨域了,你的两个IP不一样

Royal_lr
Royal_lr   Ds   Rxr 2017.01.12 17:03

跨域的问题,,在servlet里面加入

   resp.addHeader("Access-Control-Allow-Origin", "*");
        resp.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
JSXHMQS
JSXHMQS   2017.01.12 17:52

ServletActionContext.getResponse().setHeader("Access-Control-Allow-Origin", "*");

bjjoy2009
bjjoy2009   2017.01.12 18:47

跨域问题,发送请求的页面是8020端口那个html,请求的是另一个地址内容。
简单的解决方法啊,把hbuild那个项目直接放到tomcat(你的服务器的webapps文件夹下)。
如果是访问的远程的服务器的话,后台返回内容时需要添加 楼上JSXHMQS,写的内容。

bjjoy2009
bjjoy2009 回复Crystalyh22: ajax发送请求到服务端去拿到数据,就是这个请求需要找到后台的服务,前端代码js和html就足够了。后台代码就是那个java,c#一类的。这个链接写了个小demo最后那点就是js+html,jsp只是作为入口完全可以换成html,http://blog.csdn.net/bjjoy2009/article/details/54386416
11 个月之前 回复
Crystalyh22
Crystalyh22 我写了一个登录界面和一个现实界面,可以直接在js中发ajax请求然后显示在界面上吗?也就是说这个项目中除了.html文件和.js文件和样式文件外,还需要写其他类型的文件吗(比如.php文件,.jsp文件之类的)?谢谢
11 个月之前 回复
sycdzdd
sycdzdd   2017.01.13 09:52

跨域了,搜Access-Control-Allow-Origin,找解决方案

Admin_yi
Admin_yi   2017.01.18 16:58

是跨域问题,前端请求的时候用jsonp的方式,可以直接使用jQuery要简单一点http://blog.csdn.net/admin_yi/article/details/54095767

Csdn user default icon
上传中...
上传图片
插入图片