提问人:ym733 提问时间:9/21/2023 最后编辑:Md Farid Uddin Kironym733 更新时间:9/22/2023 访问量:68
使用 ajax 传递 JSON 格式的数据不起作用
passing JSON formatted data with ajax is not working
问:
我正在尝试使用一些 JSON 数据在我的控制器中调用一个操作,它似乎正在到达该操作,但数据都是空的。
这是我的 Ajax 函数的样子:
function AjaxPost(url, data) {
$.ajax({
url: url,
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(data),
//I tried adding the following but to no avail:
processData: true,
traditional: true,
success: function (response) {
//success code
},
error: function (err) {
console.error(err);
}
});
}
这就是我制作 AjaxPost 函数的方式:
<a href="javascript:AjaxPost('./Chat/PrivateChat', {id:123, username:'username', connectionID:'connectionID'})">
这是我调用的控制器:
public IActionResult PrivateChat(int id, string username, string connectionID)
{
//at this point
//id = 0
//username = null
//connectionID = null
}
我还尝试了来自以下来源的方法,但数据保持为空:
答:
0赞
Sankar Udaiyar
9/22/2023
#1
尝试添加 .它会起作用的。谢谢。!dataType: 'json'
评论
1赞
Md Farid Uddin Kiron
9/22/2023
#2
我正在尝试使用一些 JSON 数据在我的控制器中调用一个操作,它 似乎正在到达操作,但数据全部为空。
好吧,根据您的场景和描述,您将始终获得空数据。顺便说一句,您正在发送 Json 数据,您必须在控制器中使用 [FromBody] 包装 Request 模型,或者您应该将数据作为查询参数发布,如下所示:"http://localhost:5094/AjaxPostNull/PrivateChat2?id=" + data.id + "&username=" + data.username + "&connectionID=" + data.connectionID
让我们看一下实践,我们如何实现这一目标:
方式: FormBody 包装器:
请求型号:
public class AjaxRequestModel
{
public int id { get; set; }
public string username { get; set; }
public string connectionID { get; set; }
}
控制器签名:
public IActionResult PrivateChat([FromBody] AjaxRequestModel ajaxRequestModel)
{
//at this point
//id = 0
//username = null
//connectionID = null
return null;
}
注意:如果将请求与 json 模型一起发送,则应使用 [FromBody] 包装控制器
脚本:
@section scripts {
<script>
function PostAjaxRequest() {
var url = "http://localhost:5094/AjaxPostNull/PrivateChat2?id=" + data.id + "&username=" + data.username + "&connectionID=" + username +;
$.ajax({
url: url,
type: 'POST',
contentType: 'application/json; charset=utf-8',
// data: JSON.stringify(data),
success: function (response) {
//success code
},
error: function (err) {
console.error(err);
}
});
}
</script>
}
输出:
替代方法:查询字符串
@section scripts {
<script>
function PostAjaxRequest() {
var data = { id: 123, username: "Test User Name", connectionID: "My con ID" };
var url = "http://localhost:5094/AjaxPostNull/PrivateChat2?id=" + data.id + "&username=" + data.username + "&connectionID=" + data.connectionID
$.ajax({
url: url,
type: 'POST',
contentType: 'application/json; charset=utf-8',
// data: JSON.stringify(data),
success: function (response) {
//success code
},
error: function (err) {
console.error(err);
}
});
}
</script>
}
注意:您还可以使用逗号分隔值通过data:
输出:
注意:如果您想了解更多信息,请参阅此官方文档。
评论
addEventListener()
正确绑定事件处理程序。我还建议删除.你在这里不需要它,它可能会导致它解决的更多问题。href="javascript:..."
traditional: true