【问题标题】:ajax calling the wrong servletajax 调用错误的 servlet
【发布时间】:2013-12-11 09:25:00
【问题描述】:

这里的奇怪问题我似乎无法解决。

我在 Eclipse Java EE 中工作,我有一个名为 Process(映射到 /process)的 servlet

有处理链接

<a href="process?intent=order">Checkout</a>

进程内是一个 doGet 方法,验证是否有用户登录,然后重定向到结帐页面。 (这有效)结帐页面包含项目,每个项目都有一个单独的输入,我有一个单独的 doPost 方法来更新数据库..获取要更新的输入如下

<input id='ID created in servlet' value='decided in servlet'>

紧随其后

<button id="update">Button</button>

我有以下JS

  var json = [];
  $('#update').click(function(){
   $('.items').find('input').each(function(){
     var tmp = "{id:" + $(this).attr('id') + ",quantity:" + $(this).val() + "}";
     json.push(tmp);
   });

    $.ajax( {
     url : 'process',
     type : 'POST',
     data : json,
     dataType : 'json',
     success: function(data) {
             alert("success");
     }
 });

});

所以,我猜有两个问题。

首先,这是向不同项目中的不同 servlet 发送请求。但是,当使用 doGet 访问时,它可以工作。 (我有不同的 doPost 代码)是否有任何原因无法识别我的 Process.java 文件中的 doPost 方法?什么可能导致它搜索另一个 servlet?

其次,我知道在 servlet 中获取数据后该做什么,但我不知道如何实际访问数据。它通过'data:'中的jquery传递,那么我将如何在servlet中访问它?

【问题讨论】:

  • 您的 javascript 代码是否在不同路径的另一个文件中?
  • 我试过 url:'projectName/process' 无济于事。它仍然在另一个项目中调用进程。 @AlexandreLavoie js 位于 MyProject/jsp/page.jsp 中的
  • Aman 的意思是,您使用的是相对路径,因此调用是相对于当前 URL 的。您可以将url : 'process' 更改为url : '/your-context-path/process' 并替换为正确的路径。
  • 项目名称是什么?您在 Eclipse 中给出的名称?通读我刚刚发布的答案。我猜应该会有所帮助:)

标签: java ajax jakarta-ee servlets


【解决方案1】:

第一个问题:
如果我理解正确,您的问题是“当您尝试使用 AJAX(在 jquery 函数内)发送发布请求时,您没有点击所需的 servlet”。
解决方案: 您需要将项目名称附加到 url。 因此,假设您的 servlet 放置在名为 "SomeProject" 的项目中,并且 servlet 映射到名为 "servletProcess" 的 url。 所以你的 jQuery 应该看起来像这样:

var json = [];
  $('#update').click(function(){
   $('.items').find('input').each(function(){
     var tmp = "{id:" + $(this).attr('id') + ",quantity:" + $(this).val() + "}";
     json.push(tmp);
   });

$.ajax( {
 url : '/SomeProject/servletProcess',
 type : 'POST',
 data : json,
 dataType : 'json',
 success: function(data) {
         alert("success");
 }

  });

});

这应该可以解决问题:)
第二个问题:试试这个Similar Query

【讨论】:

  • 它做到了!它总是最简单的事情。非常感谢!
  • 它是,只要我使用 url:'/MyProject/process' 就可以了。奇怪的是我以前试过,但是没有用。我退出了当前在服务器下同步的所有其他项目,再次尝试,它仍然重新加载了外部 servlet。因此,我将 URL 更改为您建议的内容,并且有效。再次感谢!如果可以的话,我会投票!!
猜你喜欢
  • 2012-06-20
  • 2017-03-27
  • 2011-11-28
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 2013-12-02
相关资源
最近更新 更多