我是jQuery和$ Ajax()的新手,但对Java EE非常熟悉,并完全坚持这一点。
我从firebug中的javascript控制台获得了一个js函数和信息,它向servlet发送请求 - 但是消息永远不会到达servlet。
当get或post到达servlet时,它将始终记录某些东西,但它在$ Ajax()“调用”时从不记录任何内容。
以下是fireBug的一些输出:
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>
服务器的日志中没有任何内容。
如果我粘贴
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()");
}
答案 0 :(得分:0)
一些建议:
答案 1 :(得分:0)
这可能是由跨源脚本引起的。您的HTML和JavaScript位于何处?在与servlet相同的服务器上?在另一台服务器?或者在本地磁盘上?
如果在浏览器中直接从文件系统打开HTML文件,然后在脚本中尝试调用服务器,那么这就是问题所在。您的脚本尝试访问与脚本原点不同的服务器。
在这种情况下,浏览器通常会询问服务器是否接受来自其他来源的请求,以及服务器是否确认仅向服务器发送请求。 请参阅http://en.wikipedia.org/wiki/Cross-origin_resource_sharing。
解决方案替代方案:
将您的HTML和JavaScript放在与servlet相同的服务器上。
或者,在服务器上添加一个设置相应标头的处理程序。这将通知浏览器它将接受来自其他来源的请求。
答案 2 :(得分:0)
感谢您的建议。我问的是错误的问题所以你无法给出正确的答案。
这与调用$ Ajax()和servlet等无关。
这是因为我在HTML表单的文本字段中将该函数作为onChange()事件调用。我还没有理解导致这些症状的细节 - 不知何故,脚本运行完成但是Ajax失败了 - 但是如果我将完全相同的函数调用到完全相同的servlet - 但是在HTML表单中以不同的方式一切都很好。