【问题标题】:How to transform $.post to $.ajax?如何将 $.post 转换为 $.ajax?
【发布时间】:2015-06-23 11:27:01
【问题描述】:

我有这个 $.post 代码和平:

$.post("../admin-login",
{
   dataName:JSON.stringify({
   username:uname,
   password:pass,
   })

}, function(data,status){
    console.log("Data:"+data);
    answer = data;
    }
);

我不会将其转换为 $.ajax。在 servlet 方面,我要求 request.getParamter("dataName") 但我不知道如何在 $.ajax 中写入 data: 部分,以便我可以获得类似的参数(request.getParamter("dataName"))?此外,这种类型的代码似乎有问题,我假设异步的原因,我不能这样做:

var answer="";

function(data,status){
        console.log("Data:"+data);
        answer = data;
}

并且该答案保持为空(“”),即使在控制台中以“真”或“假”作为我的服务器答案写入。这是关于什么的? 提前致谢。

我发现问题出在 click() 事件中。 Ajax 在 click() 完成时完成,所以我无法在事件完成之前获取数据。不好的是我无法获取数据,因为它已经完成了。有谁知道如何解决这个问题?

【问题讨论】:

  • 示例中$.post 的第二个参数是您已经定义数据的方式。为什么不试试呢?

标签: javascript jquery ajax json servlets


【解决方案1】:
$.post("../admin-login",
{
   dataName:JSON.stringify({
   username:uname,
   password:pass,
   })

}, function(data,status){
    console.log("Data:"+data);
    answer = data;
    }
);

变成

function getResult(data) {
  // do something with data
  // you can result = data here
  return data;
}

$.ajax({
  url: "../admin-login",
  type: 'post',
  contentType: "application/x-www-form-urlencoded",
  data: {
   dataName:JSON.stringify({
   username:uname,
   password:pass,
   })    
},
  success: function (data, status) {
    getResult(data);
    console.log(data);
    console.log(status);
  },
  error: function (xhr, desc, err) {
    console.log(xhr);
  }
});

【讨论】:

  • 你知道我为什么不能写吗:var result="";成功:功能(数据,状态){console.log(数据);控制台.log(状态);结果=数据; } ?谢谢。
  • 如果你想这样做,你需要在$.ajax调用之前做var result="";,然后在成功函数中你可以做result = data。但要小心,因为这是异步的。
  • 是的,异步让我头疼。我尝试使用 async:false,但它仍然不会等待服务器响应,结果仍然为空。
  • 你也可以看看 Promises,因为它们会解决你的问题。这是一个很好的回应stackoverflow.com/questions/14220321/…
  • 我发现问题出在 click() 事件中。 Ajax 在 click() 完成时完成,所以我无法在事件完成之前获取数据。不好的是我无法获取数据,因为它已经完成了。你知道如何防止这种行为吗?谢谢。
【解决方案2】:

您需要查看信息如何作为查询参数或有效负载到达您的 servlet。

看到这个HttpServletRequest get JSON POST data

【讨论】:

    【解决方案3】:

    您可以尝试像下面这样构建您的 AJAX 请求:

    var dataName = username:uname, password:pass;
    
    $.ajax({
        url: "../admin-login",
        data: JSON.stringify(dataName),
        type: "POST",
        cache: false,
        dataType: "json"
    }).done(function(data, status) {
        console.log("Data:"+data);
        answer = data;
    });
    

    【讨论】:

      猜你喜欢
      • 2018-05-20
      • 2016-10-08
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2016-02-12
      • 2021-02-14
      • 2021-12-29
      • 1970-01-01
      相关资源
      最近更新 更多