Azure函数发布调用导致ajax调用导致400错误请求,并且当POST更改为GET时,相同的函数起作用

时间:2018-12-27 06:44:19

标签: azure azure-functions azure-cosmosdb

我试图对azure函数进行ajax调用,该函数将数据保存到azure门户上的cosmos db。

不起作用:

var dataArray = {
    task:"abcd",
    name:"efg",
    dDoB:"20/12/2018",
    dCountry:"America"
  };

    $.post('https://functionget.azurewebsites.net/api/***/code**', dataArray ,
    function(data,status) {
      alert("Data: " + data + "\nStatus: " + status);

  });

Works:

var dataArray = {
    task:"abcd",
    name:"efg",
    dDoB:"20/12/2018",
    dCountry:"America"
  };

    $.get('https://functionget.azurewebsites.net/api/***/code**', dataArray ,
    function(data,status) {
      alert("Data: " + data + "\nStatus: " + status);

  });

这是我的蔚蓝功能代码:

module.exports =异步函数(上下文,要求){

// We need both name and task parameters.
if (req.query.name && req.query.task) {

    // Set the output binding data from the query object.
    context.bindings.taskDocument = req.query;

    // Success.
    context.res = {
        status: 200
    };
}
else {
    context.res = {
        status: 400,
        body: "The query options 'name' and 'task' are required"
    };
}

};

当我们在控制台中寻找请求的网络,然后GET在查询字符串中发送参数并以表单数据形式发布时,有人可以让我知道如何通过ajax调用将具有参数的发布后调用发送给azure函数。前进!<​​/ p>

1 个答案:

答案 0 :(得分:2)

Ajax将dataArray作为表单数据而不是查询字符串发布,因此对于req.query.xx,我们无法按预期接收数据。我们可以发布一个Json并阅读req.body。检查下面的代码。

对于功能,将query更改为body

if (req.body.name && req.body.task) {

    context.bindings.taskDocument = req.body;
    ...
}

对于ajax,请使用$.ajax而不是$.post发送Json。

$.ajax({
  type: "POST",
  url: "<functionurl>",
  data: JSON.stringify(dataArray),
  contentType: "application/json; charset=utf-8",
  success: function(data,status) {
    alert("Data: " + data + "\nStatus: " + status);
  }
});