【问题标题】:How to return a value in ajax from a Java Rest Web service?如何从 Java Rest Web 服务返回 ajax 值?
【发布时间】:2014-04-21 13:48:20
【问题描述】:

我有一个带有 HTML 和 JQuery 的 Web 应用程序,其中有一个登录表单。当我单击提交按钮时,我正在使用 ajax 使用 Post 请求将数据发送到 Web 服务。 Web 服务是用 Java 构建的。

这是我的 html 表单:

<form id="mdxLogin" action="" method="post">
    <div class="ui-content">
            <p><input type="email" id="mdxEmail" name="mdxEmail" class="ui-field-contain" value="" placeholder="MDX Email" /> </p>
            <p><input type="password" id="mdxPassword" name="mdxPassword" class="ui-field-contain" value="" placeholder="MDX Password" /></p>
    </div>
    <div class="ui-content">
            <input type="submit" class="ui-field-contain" value="Login" id="sub"/>
    </div>
</form>

下面是我发布到我的网络服务的 Ajax 代码

$("#mdxLogin").submit(function(e) {
    e.preventDefault();
    var mdxEmail = $("input[name=\"mdxEmail\"]").val();
    var mdxPassword = $("input[name=\"mdxPassword\"]").val();

    $.ajax({
        type: "POST",
        url:"http://localhost:8080/RestService/rest/loginService/login",
        dataType:"json",
        data: $("#mdxLogin").serialize(),
        success: function(data, textStatus, jqXHR) {
            // handle your successful response here
            alert(data);
        },
        error: function(xhr, ajaxOptions, thrownError) {
            // handle your fail response here
            alert("Error");
        }
    }); 

})

以下是我的网络服务中的方法

@POST
@Path("/login")
@Produces(MediaType.TEXT_PLAIN)
public String login(@FormParam("mdxEmail") String mdxEmail, @FormParam("mdxPassword") String mdxPassword) {
  System.out.println(mdxEmail);
  DBStudent s = new DBStudent();
  String url = null;

  if (s.checkLogin(mdxEmail, mdxPassword)) {
      url = s.getCalendar(mdxEmail, mdxPassword);
  }

  return url;
 }

到目前为止,我设法将数据发布到我的网络服务,但没有得到任何响应。我的问题是如何使用 Ajax 从我的 Web 服务访问返回的 url?

【问题讨论】:

  • 首先,在 Firebug(或等效)打开的情况下运行 JS 代码。它发送什么? (您可以在此处发布数据 - 发送的数据、响应 HTTP 代码、响应正文、请求和响应标头,尤其是 Accepts:。)
  • 基本上这会将登录详细信息发送到 Web 服务。然后web服务验证登录,根据登录web服务应该返回一个url字符串(我不知道怎么做最后一部分)
  • 在进行此调用时,您在 Firebug 中看到的响应正文是什么? (通常您的代码看起来不错,可能缺少一些细节。)另外 - 您是否尝试生成另一种媒体类型?
  • 到目前为止我还没有使用过 Firebug,也许我应该尝试一下。但我注意到的是,当我提交表单时,我的 ajax 中的错误块被执行。我还注意到,在我提交表单后,chrome 中的控制台给了我这个错误XMLHttpRequest cannot load http://localhost:8080/RestService/rest/loginService/login. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost' is therefore not allowed access.
  • 我刚刚尝试使用 Firebug,作为响应,我得到了整个 HTML 文档

标签: java javascript jquery ajax web-services


【解决方案1】:

在您的代码中,我发现了一个错误,它应该会阻止它正常工作。 在客户端,您对 jQuery 说预期的类型是 JSON,但服务器会生成一个字符串,在您的情况下是一个 URL,它不是 JSON。 因此,jQuery 在尝试解析接收到的数据时会失败,因为它不是 JSON 数据。这个错误应该会触发 jQuery 错误块。

仅在客户端中应用此更改:

dataType:"text"

如果你想测试你的代码而不用担心同源策略,你可以禁用它,看看这些线程

Disable firefox same origin policy

Disable same origin policy in Chrome

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2012-07-11
    相关资源
    最近更新 更多