POST请求-字符串参数不存在

时间:2019-07-17 15:48:09

标签: javascript jquery

我正在使用AJAX将数据发送到服务器。如果我将所有数据都放入URL,它会起作用,因此一切正常。但是,当我将所有数据放入AJAX中的“数据”时,服务器写入-所需的String参数不存在。尽管我可以在请求正文中(在浏览器中)看到所有数据。可能是什么问题?

$ref

Response

3 个答案:

答案 0 :(得分:0)

也许服务器仅尝试通过查询字符串读取信息,这意味着您应该使用GET方法而不是POST提交。

尝试像这样更改method()函数:

method(type_, url_, data_){
    $.ajax({
      url: proxy + url_,
      type: "get", //Send using GET method
      headers: {
        'Authorization': 'bearer ' + localStorage.access_token
      },
      data: data_,
      success: function(result){
          alert("OK METHOD"); 
      },
      error(XMLHttpRequest, textStatus, errorThrown){
        alert('Error: ' + errorThrown + ", " + textStatus);
      console.log(XMLHttpRequest.status + ' ' + 
          XMLHttpRequest.statusText);
      }
    });
}

然后,您将其命名为而没有这样的json stringfy:

state.search.method("POST", "users", data);

答案 1 :(得分:0)

不能说我对这个答案是100%,但我在这里假设了两件事

您实际上是要在这里执行“ GET”请求而不是发布,就像您说的那样,您已经在浏览器中尝试了该URL,然后我假设您的意思是将其键入地址栏,然后是一个“ GET”请求。

您可以在JQuery中使用$ .params函数来构建查询。因此您的代码可能看起来像这样。

您的数据对象

const data = {
            firstName: 'name',
            surname: 'surname',
            email: 'email',
            password: 'pass1',
            roles: 'roles'
        }

Ajax方法

let queryString = $.param(data)
let url = 'https://your base url';

$.ajax({
   url:url+'?'+queryString, //Building your url for getting the data
   method: 'GET',
   success: function(data){
     console.log(data);
   },
   error: function(jqXHR, textStatus, errorThrown){
     console.log(textStatus) // You can console.log the other values for debugging
   }
});

我认为需要做一些工作来将值的形式映射到您将其获取到对象中,然后再映射到ajax方法中。

如果您可以给我更多有关如何将它们组合在一起的详细信息,那么我可以为您提供包含更具体信息的更新

希望这会有所帮助

注意,如果它是数据的POST,则只需了解有效负载将是什么样子即可。

答案 2 :(得分:0)

您正在发布JSON:

state.search.method("POST", "users", JSON.stringify(data));

您声称您正在发布x-www-form-urlencoded数据

contentType: "x-www-form-urlencoded",

如果您要发布JSON,请使用正确的Content-Type发送它:application/json

如果您尝试发布URL编码的数据,则:

  1. 使用正确的Content-Type发送它(这是jQuery的默认设置,因此请完全省略contentType参数,或使其正确(application/x-www-form-urlencoded)。
  2. 以以下格式发送数据:state.search.method("POST", "users", data);(默认情况下,jQuery将以该格式编码对象)。
  

如果我将所有数据都放入URL,则可以使用

如果要在URL中发布所有数据,则应该发出GET请求并对其进行正确编码。

所以:

指定 GET ,然后再次传递一个非JSON形式的对象:state.search.method("GET", "users", data);(jQuery会正确编码查询字符串中的数据)。