我正在使用AJAX将数据发送到服务器。如果我将所有数据都放入URL,它会起作用,因此一切正常。但是,当我将所有数据放入AJAX中的“数据”时,服务器写入-所需的String参数不存在。尽管我可以在请求正文中(在浏览器中)看到所有数据。可能是什么问题?
$ref
答案 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编码的数据,则:
contentType
参数,或使其正确(application/x-www-form-urlencoded
)。state.search.method("POST", "users", data);
(默认情况下,jQuery将以该格式编码对象)。如果我将所有数据都放入URL,则可以使用
如果要在URL中发布所有数据,则应该发出GET请求并对其进行正确编码。
所以:
指定 GET ,然后再次传递一个非JSON形式的对象:state.search.method("GET", "users", data);
(jQuery会正确编码查询字符串中的数据)。