【问题标题】:What is the Angular JS equivalent of this Curl POST command?这个 Curl POST 命令的 Angular JS 等效项是什么?
【发布时间】:2015-06-10 01:09:05
【问题描述】:

我正在尝试使用 Angular JS 编写以下 Curl 命令。我对 AngularJS 很陌生,所以我可能缺少一些基本的东西。具体来说,这是一个移动应用程序,它使用 ionic 框架(使用 Angular JS)

curl 命令是这样的:

curl -X POST  -d "username=xxxx&password=xxxx&action=login&view=console"  http://myserver.com/zm/index.php?skin=xml

这可以从命令行完美运行。

在 AngularJS 中,我有以下代码:

angular.module('starter.controllers').controller('MonitorCtrl', function($ionicPlatform, $scope,$http)
{
            
console.log("***MAKING REQUEST");
                                                 

//$http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
                                                 
 $http({
    url:'http://myserver.com:9898/zm/index.php?skin=xml',
    method:'post',
    headers: {'Content-Type': 'application/x-www-form-urlencoded',
              'Accept': '*/*',
       },
    transformRequest: function(obj) {
       var str = [];
       for(var p in obj)
       str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
       var foo= str.join("&");
       console.log ("****RETURNING "+foo);
       return foo;
    },
       data: {username:'admin',
              password:'xxxx',
              action:'login',
              view:'console'}
       
  })
                                                 
.success (function()
{console.log("****YAY");
})
.error(function(data, status, headers, config)
{
        console.log("***OOPS "+status + " H: "+data);
});
                                                 
                                                
});

当我运行此代码时,我看到一个 POST 请求发送到我的服务器(我正在使用 httpry 进行嗅探),并且从服务器返回了一个带有所需负载的 200OK,但没有调用我的成功处理程序。错误处理程序被调用,状态为 0

【问题讨论】:

    标签: javascript angularjs curl


    【解决方案1】:

    数据应该是json。这取决于您的服务器。

    常见的方法是在对象上使用属性:

    data: {username: 'xxxx', password: 'xxxx', action: 'login', view:'console'}
    

    但是如果你的服务器接收到一个字符串作为输入,那么:

    data: {key: 'username=xxxx&password=xxxx&action=login&view=console'}
    

    【讨论】:

    • 阿米尔,谢谢。转换为 JSON 不起作用。服务器拒绝 POST。当我将其保留为原始字符串而不转换为 JSON 时,我可以看到 HTTP POST 被响应为 200 OK 和我期望的有效负载——只是没有调用“成功”函数。
    • 这取决于你如何实现你的服务器。您希望在您的服务器上获得什么?
    • 阿米尔,这里是通过 CurRL 命令行从请求和响应中获得的原始转储,向您展示使用 curl 时的确切工作原理:
    • 糟糕,这里是链接:pastebin.com/ujLzDyyH(服务器是第 3 方服务器 - 不是我的实现)
    • 我已经更新了将 JSON 处理为非 json 格式的代码,我已经验证服务器正在返回正确的响应,但由于某种原因,我的失败句柄正在应用程序中被调用。有什么想法吗?
    【解决方案2】:

    好吧,我终于想通了

    a) Amir popovich 是对的,如果我正在处理 XML,我需要将 JSON 转换为 XML。我在我的问题中发布的更新代码正是这样做的并且有效。但即使做了所有这些,我的 URL 发布(或获取)还是失败了。

    b) 我所面临的整个 CORS 错误是因为我在桌面浏览器 (Safari) 中运行这个应用程序,并且除非它有 Accept Origin,否则 Safari 会踢出响应

    c) 当我在手机上部署和测试该应用程序时,它就像一个魅力。不要问我为什么

    【讨论】:

      猜你喜欢
      • 2015-09-14
      • 2021-09-15
      • 2019-04-16
      • 1970-01-01
      • 2013-02-02
      • 2013-08-30
      • 1970-01-01
      • 2011-10-16
      • 1970-01-01
      相关资源
      最近更新 更多