当前位置: 首页 > 知识库问答 >
问题:

使用$http POST内容类型应用程序/x-www-form-urlencoded访问API

章学义
2023-03-14

我试图访问这个REST API,它接受三个参数stationIdcrusherIdmonthDay我在AngularJS中这样做:

$http({
        //headers: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},
        //headers: {'Content-Type': 'application/json; charset=UTF-8'},
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
            'Accept':       'application/json'
        },
        url:    'https://myurl../api/getHPData',
        method: 'POST',
        data: {
            stationId: 263, 
            crusherId: 27, 
            monthYear: '2016-4'
        }
    })

    .then(function(data, status, headers, config) {
            //console.log(JSON.stringify(response));
            console.log(data);
     })
    .catch(function(error){
            //console.log("Error: " + JSON.stringify(error));
            console.log(error);
        })

但我总是这样:

对象{data:“{”result:“false”},状态:200,配置:Object,状态文本:“OK”,标题:function}

或者

{"data":"{\"结果\":\"false\"}","状态": 200,"配置":{"方法":"POST","transformRequest":[null],"transformSolutions":[null],"标头":{"Content-Type":"应用程序/x-www-表单-urlencoded; charset=UTF-8","接受":"应用程序/json"},"url":"https://myurl.../api/getHPData","data":{"stationId": 263,"crusherId": 27,"monthYear":"2016-4"}},"statusText":"OK"}

如果我将标头Content-Type更改为:

headers: {'Content-Type': 'application/json; charset=UTF-8'},

它给出:

对象{data: null,状态:-1,配置: Object, statusText:"",标头:函数}

或者

{“data”:null,“status”:-1,“config”:{“method”:“POST”,“transformRequest”:[null],“transformResponse”:[null],“headers”:{“Content Type”:“application/json;charset=UTF-8”,“Accept”:“application/json,text/plain,/”,“url”:https://myurl../api/getHPData“,”数据“:{“stationId”:263,“crusherId”:27,“monthYear”:“2016-4”},”,statusText:“}”

我做错了什么,请帮帮我。

普朗克在这里:

https://plnkr.co/edit/57SiCdBZB2OkhdR03VOs?p=preview

(编辑)

注意:我可以在jQuery中这样做:

<script>
$(document).ready(function() {
        get_homepage_data(263, 27, '2016-04');

        function get_homepage_data(stationIds, crusherIds, date) {
            var url = "https://myurl../api/getHPData";
            var data_to_send = {
                'stationId': stationIds, 
                'crusherId': crusherIds,
                'monthYear': date
            };

            console.log("Value is: " + JSON.stringify(data_to_send));
            //change sender name with account holder name
            //        console.log(data_to_send)
            $.ajax({
                url: url,
                method:   'post',
                dataType: 'json',
                //contentType: 'application/json',
                data: data_to_send,
                processData: true,
                // crossDomain: true,
                beforeSend: function () {
                }
                , complete: function () {}
                , success: function (result1) {
                    var Result = JSON.parse(result1);
                    var value_data = Result["valueResult"];
                    var foo = value_data["gyydt"];

                    console.log("Log of foo is: " + foo);

                    var foo2 = 0;
                    // 10 lac is one million.
                    foo2 = foo / 1000000 + ' million';

                    console.log(JSON.stringify(value_data["gyydt"]) + " in million is: " + foo2);
                }
                , error: function (request, error) {
                    return false;
                }
            });
        }   
    }); // eof Document. Ready  
</script>

以上脚本的输出为脚本为:

  • value is:{"stationId": 263,"crusherId": 27,"monthYear":"2016-04"}
  • XHR完成加载:发布https://myurl.../api/getHPData。
  • foo的日志是: 26862094
  • "26862094"百万分之一是:2686.2094万

这是完美的。:)

共有2个答案

郎子平
2023-03-14

文档中说stationId和crusherId参数应该是字符串数组。另外,看起来您正在发送JSON数据,因此请确保正确设置该标头。

$http({
    headers: {
        'Content-Type': 'application/json', 
        'Accept':       'application/json'
    },
    url:    'https://fnrc.gov.ae/roayaservices/api/getHPData',
    method: 'POST',
    data: {
        stationId: ['263'], 
        crusherId: ['27'], 
        monthYear: '2016-4'
    }
})

当我改变你的plumkr中的代码以使用上面的更正代码时,我得到以下响应:请求的资源不支持超文本传输协议方法'OPTIONS'。

正如另一个(现已删除)答案正确提到的,这意味着存在CORS问题。浏览器试图在发出跨源请求之前发送一个“预飞行”请求,服务器不知道该怎么办。您也可以在Chrome控制台中看到此消息

无法加载XMLHttpRequesthttps://fnrc.gov.ae/roayaservices/api/getHPData. 飞行前的响应具有无效的HTTP状态代码405

寿鸣
2023-03-14

当发布URL编码的表单数据时,使用$http pParamSerializer服务转换请求:

$http({
    headers: {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},
    url: 'https://fnrc.gov.ae/roayaservices/api/getHPData',
    method: 'POST',
    transformRequest: $httpParamSerializer,
    transformResponse: function (x) {
      return angular.fromJson(angular.fromJson(x));
    },
    data: {
      "stationId": 263,
      "crusherId": 27,
      "monthYear": '2016-04'
    }
}) 
  .then(function(response) {
    console.log(response);
    $scope.res = response.data;
    console.log($scope.res);
});

通常,$超文本传输协议服务会自动解析JSON编码对象的结果,但是这个API会返回一个从对象双重序列化的字符串。transformContent函数修复了该问题。

PLNKR上的演示

 类似资料:
  • 问题内容: 我想上网本REST API,它接受三个参数: ,, 我做它像这样在AngularJS为: 但是我总是这样: 对象{数据:“ {”结果“:”假“}”“,状态:200,配置:对象,状态文本:”确定“,标头:功能} 要么 {“ data”:“ {\” result \“:\” false \“}”,“状态”:200,“ config”:{“方法”:“ POST”,“ transformReq

  • 我的要求很简单。 响应是xml格式的。 我尝试了很多地方的例子,但似乎没有任何效果。它返回401 Unauthorized,如果请求的格式不正确,目标API就会抛出这个错误。

  • 我有一个api要求在标题中发送以下参数- 内容类型-应用程序/x-www. form-urlencoded AuthKey-(会话令牌) 以及正文中的以下参数(表单日,即键值对) storeId-1 类型-产品 类别ID-324 但是每当我点击这个api,我总是得到401(未授权)错误。我已经尝试使用MultipartRequest正文和formBody,我知道这与正文无关(它的头,我需要发送内容

  • 我目前正在开发wp8。在应用程序C#中,我通过从textbox创建一个json对象(bm),成功地将json中的POST方法执行到我的api中。短信。下面是我的代码。我该如何使用相同的文本框。文本并以的形式发布。代码是什么?

  • 我正在使用MediaType中的“resteasy客户端”库发送POST请求。申请表格编码类型。 示例代码: Maven依赖项 连接工作正常,并在使用POSTMAN请求时发送正确的响应 但是在请求使用程序后,它会创建错误 回应: javax.ws.rs.处理异常:找不到内容类型应用程序的编写器/x-www-form-urlencoded类型 请帮忙。。。

  • @PostMapping public UserResponse createUser(@RequestBody UserRequest userDetail){ 这是我收到的错误代码 } 我尝试了很多不同的方法仍然没有得到解决方案这是来自邮递员的图片来自邮递员的图片