Java servlet未接收到ajax
我对jQuery和$Ajax()是全新的,但对JavaEE非常熟悉,并且完全专注于此 我在firebug中有一个js函数和来自javascript控制台的信息,它向servlet发送一个请求,但消息从未到达servlet 当get或post到达servlet时,它总是会记录一些东西,但当$Ajax()调用它时,它不会记录任何东西 以下是fireBug的一些输出:Java servlet未接收到ajax,java,javascript,jquery,ajax,servlets,Java,Javascript,Jquery,Ajax,Servlets,我对jQuery和$Ajax()是全新的,但对JavaEE非常熟悉,并且完全专注于此 我在firebug中有一个js函数和来自javascript控制台的信息,它向servlet发送一个请求,但消息从未到达servlet 当get或post到达servlet时,它总是会记录一些东西,但当$Ajax()调用它时,它不会记录任何东西 以下是fireBug的一些输出: about to call ajax()<br> showCID.jsp (line 12)<br>
about to call ajax()<br>
showCID.jsp (line 12)<br>
GET http://localhost:8080/RHY_Tools/AjaxServlet?id=123<br>
jquery....min.js (line 6)<br>
done with call to ajax()<br>
showCID.jsp (line 41) Error:<br>
showCID.jsp (line 30) Status: error<br>
showCID.jsp (line 31) readyState <br>
一些建议:
- url不应该需要完整的主机(因为它是ajax,默认情况下会连接到浏览器已经连接的主机)。您是否尝试过myurl='/RHY_Tools/AjaxServlet?id=123'
- 检查firebug的网络流量面板,看看它是否从客户端角度得到响应(404、500、200等),或者只是超时。这将帮助您调试它实际到达的位置(如果在任何地方)
- 最后,这可能只是上面post/html中的一个输入错误,但我看到URL的结尾有“
” - 将HTML和JavaScript与servlet放在同一服务器上
- 或者,在服务器上,添加设置相应头的处理程序。这将向浏览器发出信号,表示它将接受来自其他来源的请求
- 这可能是由跨源脚本引起的。你的HTML和JavaScript在哪里?在与servlet相同的服务器上?在另一台服务器上?还是在本地磁盘上
如果在浏览器中直接从文件系统打开am HTML文件,然后在脚本中尝试调用服务器,则这就是问题所在。脚本尝试访问与脚本源不同的服务器
在这种情况下,浏览器通常会询问服务器是否会接受来自另一个源的请求,以及服务器是否确认,然后才将请求发送给浏览器。
看
解决方案备选方案:
谢谢你的建议。我问错了问题,所以你不能给出正确的答案 这与调用$Ajax()或servlet等无关
这是因为我在HTML表单的文本字段中以onChange()事件的形式调用函数。我还不明白这些症状是如何产生的——不知何故,脚本运行完成了,但Ajax失败了——但如果我调用完全相同的函数到完全相同的servlet——但在HTML表单中以不同的方式,一切都很好。你能打开浏览器的网络控制台,看看响应包含什么吗?你能记录响应吗在通过此行将其添加到正文之前,$(“”).text(resp).appendTo(“正文”);控制台日志(“响应:+resp”);1) $Ajax()调用没有网络流量!2) 没有办法查看resp,因为success:子句从未到达。我添加了console.log(但它什么也不做),servlet和包含Ajax()的jsp位于同一个应用程序中的同一台服务器上。Firebug控制台显示来自jQuery的一个日志条目,其中显示了完全扩展的地址,该地址是正确的,并且在粘贴到浏览器中时有效。似乎Ajax()实际上并没有发出请求——它在发出请求之前失败了。我只是将servlet命名为“AjaxServlet”——日志显示了来自jQuery的一个条目,其中包含正确的完整url。我已经使用各种变体运行了100次—一次成功—然后在部署没有任何更改的情况下停止工作。从这一点我可以看出响应是什么样子的——jQuery似乎在调用servlet之前抛出了一个错误。因为否则firebug不会显示来自该调用的NETOWRK流量。但是在读“error”的错误消息中没有可读性
http://localhost:8080/RHY_Tools/AjaxServlet?id=123 into the browser window the server log shows:
INFO: Id parameter is: 123<br>
INFO: done now.<br>
var myurl="AjaxServlet";
function checkCID(cid) {
console.log("about to call ajax()");
$.ajax({
url:myurl ,
data: {id: 123},
type: "GET",
success: function( resp ) {
$( "" ).text( resp ).appendTo( "body" );
},
error: function( xhr, status, errorThrown ) {
console.log( "Error: " + errorThrown );
console.log( "Status: " + status );
console.dir( xhr );
},
complete: function( xhr, status ) {
alert( "The request is complete!" );
}
});
console.log("done with call to ajax()");
}