AngularJS jsfiddle $http echo 不返回数据

AngularJS jsfiddle $http echo not returning data

我在节点的方形连接 API 包装器中遇到了一个错误,我做了一个 fiddle 来重现这个问题。我注意到我的代码没有工作,因为 angular {{}} 东西没有出现。怎么了?

我唯一想做的就是在创建按钮下方显示原始 JSON 对象(最好是 {{res}},但这并不重要)。我只是想向库的作者证明我的对象和数据是有效的,并且错误在他的库中,而不是我的实现中。

    var httpRequest = $http({
        method: 'POST',
        url: '/echo/json/',
        data: item
    }).success(function(data, status) {
        $scope.res = data;
    }).failure(function(data, status){
        $scope.res = data+status;
    });

data 没有从 jsfiddle 的 ECHO 返回。

http://jsfiddle.net/efjytg6r/2/

您很接近,但是由于您将 $http 保存在一个变量中,您可以使用该变量访问其中的方法。 (即:httpRequest.success /等)

也是.error()不是.failure()

    var httpRequest = $http({
        method: 'POST',
        url: '/echo/json/',
        data: item
    });

    httpRequest.success(function(data, status) {
        $scope.res = data;
    });

    httpRequest.error(function(data, status){
        $scope.res = data+status;
    });

jsFiddle 对它的 echo AJAX 示例很挑剔。您需要使用 json 正确格式化发送给他们的内容,将其字符串化并使用 jQuery 的 $.param(因为 angular 不执行 POST 就像您习惯使用 jQuery).

  • 我在下面的 fiddle 中加入了 jQuery。
  • 我对发送的数据进行了不同的格式化
  • 我把你的 {{ res }} 移到了控制器区域(你把它放在外面了,这意味着它不会计算)
  • 我将 | json 过滤器添加到 {{ res | json }}

Updated jsFiddle

    // the wacky format you need if you want to do fake $http to jsFiddle
    // case in point, if you're trying to DEMO this, I wouldn't even bother, since it won't look like this when you actually use this within your application

    var data = $.param({
        json: JSON.stringify({
            item
        })
    });

    $http.post("/echo/json/", data)
            .success(function(data, status) {
                $scope.res = data;
            }).error(function (status) {

            });

这是一个使用 $httpParamSerializer 和延迟的示例。

angular.module('myApp',[]);

angular.module('myApp').controller('myVm',
  function($scope,$http,$httpParamSerializer) {
    var vm = $scope;
    var xitem = {a:"1",b:"2"};
    var data = $httpParamSerializer({
        json: xitem,
        delay: 6
    });
    console.log("Posting xitem");
    vm.p = $http.post('/echo/json/',data);
    vm.p.then (function(response) {
        console.log(response);
        console.log(response.data)
    })
});