【问题标题】:how to change post['Content-Type'] in angularjs如何在angularjs中更改帖子['Content-Type']
【发布时间】:2013-07-10 17:17:02
【问题描述】:

我想在 angularjs 中更改 post['Content-Type'] 所以我使用

  app.config(function($locationProvider,$httpProvider) {
$locationProvider.html5Mode(false);
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;        charset=UTF-8';
 });

事件是

     $http.post("http://172.22.71.107:8888/ajax/login",{admin_name:user.u_name,admin_password:user.cert})
        .success(function(arg_result){

            console.log(arg_result);


        });
};

结果是这样的

Parametersapplication/x-www-form-urlencoded
{"admin_name":"dd"} 

我想要的是

Parametersapplication/x-www-form-urlencoded
 admin_name dd

那我该怎么办?

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    试试看:

    var serializedData = $.param({admin_name:user.u_name,admin_password:user.cert});
    
    $http({
        method: 'POST',
        url: 'http://172.22.71.107:8888/ajax/login',
        data: serializedData,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }}).then(function(result) {
               console.log(result);
           }, function(error) {
               console.log(error);
           });
    

    【讨论】:

    • 非常感谢!效果很好!但是我没有"$.param"的功能
    • $.param 是一个 jQuery 函数,用于将表单数据序列化为字符串。 api.jquery.com/jQuery.param 。使用application/x-www-form-urlencoded时需要像这样序列化你的JSON@
    • @XzAngular,您可以使用 JSON.stringify(requestObject) 代替 $.param。它不需要 jQuery。
    • 非常好!我遇到了预检选项请求的问题,没有用适当的标题响应,但 post 有。使用上面的代码并将其从“application/x-www-form-urlencoded”更改为“text/plain”为我解决了这个问题。默认内容类型为“application/json”
    【解决方案2】:
    angular.module('myApp', [])
            .config(function ($httpProvider) {
                $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded';
                $httpProvider.defaults.headers.post['Content-Type'] =  'application/x-www-form-urlencoded';
            })
    

    【讨论】:

    • 我在这上面花了大约两个小时。谢谢!
    【解决方案3】:

    OP 正在使用Content-Type : application/x-www-form-urlencoded,因此您需要使用$httpParamSerializerJQLike 将帖子数据从 JSON 更改为字符串

    注意:没有data属性,而是params属性

    $http({
                method: 'POST',
                url: 'whatever URL',
                params:  credentials,
                paramSerializer: '$httpParamSerializerJQLike',
                headers: {'Content-Type': 'application/x-www-form-urlencoded'}
            })
    

    此外,您可以注入序列化程序并通过 data 属性显式使用它

    .controller(function($http, $httpParamSerializerJQLike) {
    ....
    $http({
            url: myUrl,
            method: 'POST',
            data: $httpParamSerializerJQLike(myData),
            headers: {
              'Content-Type': 'application/x-www-form-urlencoded'
            }
         });
    

    【讨论】:

      【解决方案4】:

      看看这个: How can I post data as form data instead of a request payload?

      或者,您可以执行以下操作:

      $http.post('file.php',{
              'val': val
          }).success(function(data){
                  console.log(data);
              });
      

      PHP

      $post = json_decode(file_get_contents('php://input'));
      $val = print_r($post->val,true);
      

      【讨论】:

      • 是的。提供您的问题作为小提琴或 plunkr,我会看看
      • 这是一个不完整的解决方案,如果你想指定除默认之外的其他内容类型,你必须在http服务中声明它。我并不是说您的解决方案不起作用或确实起作用,但这不是我们所要求的。
      猜你喜欢
      • 2019-07-20
      • 2015-05-08
      • 1970-01-01
      • 2017-07-10
      • 2012-07-28
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      相关资源
      最近更新 更多