【问题标题】:Unable to get value in Ajax response无法在 Ajax 响应中获得价值
【发布时间】:2015-02-11 09:05:09
【问题描述】:

接收请求的servlet --

     Gson gson = new Gson(); 
    JsonObject myObj = new JsonObject();
    LoginBean loginInfo = getInfo(userId,userPwd);
    //System.out.println("00000000-----------"+loginInfo.userId);
    JsonElement loginObj = gson.toJsonTree(loginInfo);
    if(loginInfo.getUserId() == "GUEST!"){

        myObj.addProperty("success", false);
    }
    else {

        myObj.addProperty("success", true);
    }
    myObj.add("login", loginObj);
    System.out.println(":::::"+myObj.get("success"));
    out.println(myObj.toString());
    out.close();

这里是js文件-----

function loadScript(url, callback)
{
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
script.onreadystatechange = callback;
script.onload = callback;
head.appendChild(script);
}
    loadScript("js/json2.js", myJSCode);
    var myJSCode = $(document).ready(function() {

$("#loginForm").submit(function(e){
       e.preventDefault();
});


$("#login").click(function(e){


        dataString = $("#loginForm").serialize();


        var id = $("input#id").val(); 
        var pwd = $("input#pwd").val();
        dataString = "id=" + id + "&pwd="+pwd;

        $.ajax({
            type: "POST",
            url: "login",
            data: {
                id : id,
                pwd : pwd
            },

            dataType: "json",


            success: function( data, textStatus, jqXHR) {
                 if(data.success){
                     $("#ajaxResponse").html("");
                     $("#ajaxResponse").append("<b>Welcome</b> " + data.login.id + "<br>");
                     //alert("#ajaxResponse" + data.login.id);
                     alert(data['id']);   
                     alert(data['pwd']);

                 } 

                 else {
                     $("#ajaxResponse").html("<div><b>Login Credentials are invalid!</b></div>");
                 }
            } 
 });     

如果我使用 1 个元素,即“id”,我会得到 ajaxResponse,但是当我尝试同时获得两个响应时,我得到的值是未定义的。我尝试使用 data.login.id & data[id] 但无法获得所需的输出。任何帮助将不胜感激。甚至我也尝试过 JSON.Stringify()。

【问题讨论】:

  • 您可以添加原始响应吗?如果我看不到响应,就无法说明您的代码有什么问题。
  • 我在
    中得到了“未定义”
  • 我知道,但是 ajax 响应中数据的价值是什么?在函数中传递的值(数据、文本状态、jqXHR)?添加console.log(data),在控制台窗口中就可以看到了。
  • 这是我在控制台中得到的——未捕获的 TypeError: undefined is not a function login.js:52 $.ajax.success jquery.js:1075 jQuery.Callbacks.fire jquery.js:第1193章

标签: java javascript jquery ajax servlets


【解决方案1】:
     $.ajax({
                type: "POST",
                url: "login",
                data: {
                    id : id,
                    pwd : pwd
                },
...

这里有传给ajax的数据和里面的数据不一样

    success: function( data, textStatus, jqXHR) {
                     if(data.success){
...

在此成功回调中,数据是来自服务器的响应,并且基于服务器返回给您的数据,它具有不同(或相同的结构)。 如果你想打印来自 ajax 调用的值,你只需要使用 id

$("#ajaxResponse").append("<b>Welcome</b> " + id + "<br>");

我看到你正在尝试使用“data.login.id”,你能检查一下数据的真实结构是什么吗?添加 console.log(data) 或设置断点回调,或简单添加调试器;代码,它将为您停止该行中的代码而不添加断点。

【讨论】:

  • 你能以我理解你想说的话的方式操作我的代码吗?实际上我所知道的是我正在从 Servlet 发送 Json 数据,这就是我在 js 中使用 dataType: "json", 的原因。我将如何检索从 servet 发送的 json 数据。直接作为 id 获得响应是行不通的。
【解决方案2】:

谢谢亚历克斯。我会给你 +1 的线路

  $("#ajaxResponse").append("<b>Welcome</b> " + id + "<br>");

虽然我使用时它正在工作:

      data: {

                id: $('#id').val(),
                pwd: $('#pwd').val()
            },

如果不将我的代码更改为这一行,则该行无法正常工作。谢谢你的建议。

【讨论】:

  • 当我创建一个 LoginBean 并将数据作为 String 获取时,显然我无法掌握的一个部分。即数据有一个字符串值,我使用 data.login.id 得到结果,其中 login 是 LoginBean 的对象,但在这种情况下我直接得到它。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多