Java servlet未接收到ajax

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>

我对jQuery和$Ajax()是全新的,但对JavaEE非常熟悉,并且完全专注于此

我在firebug中有一个js函数和来自javascript控制台的信息,它向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>
一些建议:

  • url不应该需要完整的主机(因为它是ajax,默认情况下会连接到浏览器已经连接的主机)。您是否尝试过myurl='/RHY_Tools/AjaxServlet?id=123'
  • 检查firebug的网络流量面板,看看它是否从客户端角度得到响应(404、500、200等),或者只是超时。这将帮助您调试它实际到达的位置(如果在任何地方)
  • 最后,这可能只是上面post/html中的一个输入错误,但我看到URL的结尾有“

    • 这可能是由跨源脚本引起的。你的HTML和JavaScript在哪里?在与servlet相同的服务器上?在另一台服务器上?还是在本地磁盘上

      如果在浏览器中直接从文件系统打开am HTML文件,然后在脚本中尝试调用服务器,则这就是问题所在。脚本尝试访问与脚本源不同的服务器

      在这种情况下,浏览器通常会询问服务器是否会接受来自另一个源的请求,以及服务器是否确认,然后才将请求发送给浏览器。 看

      解决方案备选方案:

    • 将HTML和JavaScript与servlet放在同一服务器上

    • 或者,在服务器上,添加设置相应头的处理程序。这将向浏览器发出信号,表示它将接受来自其他来源的请求


    • 谢谢你的建议。我问错了问题,所以你不能给出正确的答案

      这与调用$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()");
      }