【问题标题】:angularjs $http success data parameter doesn't return the right objectangularjs $http 成功数据参数不返回正确的对象
【发布时间】:2014-09-14 08:32:34
【问题描述】:

我正在使用 $http 发布一个 angularjs 变量,我确实在 servlet 的 doPost 方法中收到了 JSON 等价物。当我在 servlet 的响应中编写 JSON 时,会调用 $http.success(data, status, header, config) 。但是,当我将“数据”分配给 angularjs 变量时,不会为该变量分配任何值。尝试使用 JSON.parse(data) 但没有用。以下是代码sn-p。

AngularJS

$scope.result = {
    title: "",
    subject: "",
    summary: "",
    body: "",
    extra: ""
};

$http.post(url, JSON.stringify(obj)).
success(function(data, status, headers, config){
        $scope.result = JSON.parse(data);
        console.log("data: " + data);
        console.log("status: " + status);
        console.log("headers: " + headers);
        console.log("config: " + config);
    })
    .error(function(data, status, headers, config){
        $scope.result = JSON.parse(data);
        console.log("data: " + data);
        console.log("status: " + status);
        console.log("headers: " + headers);
        console.log("config: " + config);
    });

收到响应的控制台输出如下

data: [object Object]
status: 200 
headers: function (name) {
   if (!headersObj) headersObj =  parseHeaders(headers);

   if (name) {
      return headersObj[lowercase(name)] || null;
   }

   return headersObj;
  }
config: [object Object]

以下是来自 servlet 的代码 sn-p。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        System.out.println("doPost called");
        response.getWriter().write("{"title":"Transaction Status","subject":"Congratulations!!","summary":"Successfully received your request, below is your Transaction ID","body":"5a85fc3b303d47dca6514b707442f2cd","extra":"Please save this transaction ID for future reference"}");
    }

我无法在 angularjs 成功函数中获取从 doPost() 方法发送的 JSON。这是正确的做法吗? Angularjs 自动将接收到的 JSON 转换为 javascript 对象类型,因此我必须能够将“数据”直接分配给 $scope.result。

如果有人能指出正确的方向,那就太好了。

【问题讨论】:

  • data 是一个包含属性data 的对象。该属性包含您想要的内容。您可能想将data 重命名为response。如果你这样做,你可以分配response.data(不使用JSON.parse()
  • 我试过你的建议,下面是控制台输出。响应:未定义状态:200 标头:函数(名称){ if (!headersObj) headersObj = parseHeaders(headers); if (name) { return headersObj[lowercase(name)] ||空值; } 返回标头对象; } common.js:113 配置:[object Object]
  • 在您的成功函数中,添加console.dir(data) 并添加对您问题的回复
  • console.dir 打印出整个对象,这就是我在其中找到的。 "body: "cb309b8454464a0e90b4aea3ecb7372c" extra: "请保存此交易 ID 以备将来参考" 主题: "恭喜!!" 摘要: "成功收到您的请求,下面是您的交易 ID" title: "交易状态" 万感谢您的帮助,它解决了我的问题。

标签: json angularjs servlets post


【解决方案1】:

使用这个:

$http.post(url, $.param(obj), {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    }
})

如果你不想使用 jQuery $.param,你可以使用替代方法

$http.post(url, obj, {
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
    },
    transformRequest: function(obj) {
        var str = [];
        for(var p in obj)
        str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
        return str.join("&");
    }
})

【讨论】:

  • 请问应该怎么做?
  • 将数据作为表单数据而不是请求负载发送
  • queryparams引用的是哪个方法?
  • 编辑:queryparams 是一个错误
猜你喜欢
  • 2015-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-22
  • 1970-01-01
  • 2021-12-14
相关资源
最近更新 更多