我正在尝试制作一个客户端 - 服务器应用程序,我从客户端通过 JSON 对象向服务器发送请求以进行注册。问题是我应该得到另一个带有“OK”字段的 JSON(实际上正在发送)但由于某种原因,客户端继续使用该.fail
函数而不是函数.done
(对不起,如果某些使用的术语不是很准确,我我是新手)。
所以我将这是我的代码,您可以检查是否有任何错误导致此问题:
客户端JS:
define(['ojs/ojcore', 'knockout', 'jquery', 'appController', 'jquery', 'ojs/ojknockout', 'ojs/ojinputtext'],
function(oj, ko, $, app) {
function RegistrarseViewModel() {
var self = this;
this.email = ko.observable();
this.pwd1 = ko.observable();
this.pwd2 = ko.observable();
this.registrar = function(){
alert("Se ha mandado el registro");
var p = {tipo:"Registrarse",email: this.email(), pwd1:this.pwd1(), pwd2:this.pwd2()};
$.ajax({
type:"POST",
url:"http://localhost:8080/ServidorWeb/Registrarse.jsp",
data: "p=" + JSON.stringify(p)
}).done(function(data, textStatus, jqXHR){
alert("Comprobando tipo");
if (data.tipo == "OK"){
//window.location="index.html?root=juegos"
sessionStorage.jugador=self.email();
app.router.go("login");
alert("Registro correcto");
}else
alert(respuesta.texto)
}).fail(function() {
alert("Sorry. Server unavailable. lol ");
});
}
this.cancelar = function(){
app.router.go("login");
}
}
return new RegistrarseViewModel();
}
);
服务器 JSP:
<%@ page language="java" contentType="application/json ; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import= "org.json.*,dominio.Manager"%>
<%
String p = request.getParameter("p");
JSONObject resultado=new JSONObject();
try{
JSONObject jso= new JSONObject(p);
if(!jso.getString("tipo").equals("Registrarse")){
resultado.put("tipo","NOK");
resultado.put("texto","Mensaje inesperado");
}else{
String email=jso.getString("email");
String pwd1=jso.getString("pwd1");
String pwd2=jso.getString("pwd2");
Manager.get().registrarse(email,pwd1,pwd2);
resultado.put("tipo","OK");
resultado.put("texto","Te has registrado con el email " + email);
}
}
catch(Exception e){
resultado.put("tipo","NOK");
resultado.put("texto","Mensaje Inesperadoo");
}
%>
<%=resultado.toString()%>
执行后Manager.get().registrarse(email,pwd1,pwd2);
(这是注册到 MongoDB 的逻辑)它只是继续该resultado.put("tipo","OK");
行,这意味着问题不在那里。
另外,如果我http://localhost:8080/ServidorWeb/Registrarse.jsp?p=%7Btipo:%22Registrarse%22,email:%2233%22,pwd1:%2220%22,pwd2:%2220%22%7D
从像 Google Chrome 这样的浏览器发送请求,它会打印出这个:{"texto":"Te has registrado con el email 33","tipo":"OK"}
但是从真正的客户端它不会进入该.done
功能,我知道为什么。
我真的希望你能帮助我。
提前致谢。
编辑 1:添加了来自浏览器控制台 IMAGE的服务器响应
好的,我终于解决了这个问题。
我不得不在 .jsp 的开头添加这条线,这是 TomCat 的一个问题,它有 2 台机器,如果没有这条线,它似乎由于安全原因不允许不同机器之间的通信。
response.setHeader("Access-Control-Allow-Origin", "*");
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句