使用javascript对象数组作为ajax调用参数,而不使用jquery?
我试图在不使用jQuery的情况下将JavaScript对象数组发送到我的ASP.NETMVC控制器。我有一个简单的JavaScript对象数组,如下所示使用javascript对象数组作为ajax调用参数,而不使用jquery?,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我试图在不使用jQuery的情况下将JavaScript对象数组发送到我的ASP.NETMVC控制器。我有一个简单的JavaScript对象数组,如下所示 var data = []; data.push(new person(1, "David")); data.push(new person(2, "Karine")); data.push(new person(2, "Annie")); ...etc function person(_id, _name) { this.id
var data = [];
data.push(new person(1, "David"));
data.push(new person(2, "Karine"));
data.push(new person(2, "Annie"));
...etc
function person(_id, _name) {
this.id = _id;
this.name = _name;
}
…我希望将其作为ajax调用的参数,如下所示:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
var obj = JSON.parse(xmlhttp.responseText);
for (var i = 0; i < obj.length; i++) {
if (i == 1) {
alert(obj[i].name);}
}
}
else {
alert('There is an error');
}
}
};
xmlhttp.open("GET", "/Home/AjaxTester?id=15&name=dave", true);
xmlhttp.send();
public JsonResult AjaxTester(FromUri List<Person> _person)
…以及所接收参数的类别
public class Person
{
public int id { get; set; } = 0;
public string name { get; set; } = "";
public Person(int _id, string _name)
{
this.id = _id;
this.name = _name;
}
}
在参数之前需要有
FromUri
命令,如下所示:
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
var obj = JSON.parse(xmlhttp.responseText);
for (var i = 0; i < obj.length; i++) {
if (i == 1) {
alert(obj[i].name);}
}
}
else {
alert('There is an error');
}
}
};
xmlhttp.open("GET", "/Home/AjaxTester?id=15&name=dave", true);
xmlhttp.send();
public JsonResult AjaxTester(FromUri List<Person> _person)
publicJSONResult AjaxTester(来自URI列表\u个人)
您需要将http方法从GET更改为POST
xmlhttp.open("POST", "/Home/AjaxTester?id=15&name=dave", true);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send(JSON.stringify(data));
确保添加setRequestHeader。如果要发送json对象,请将请求头更改为以下内容:
xhr.setRequestHeader("Content-type", "application/json");
我还建议删除查询参数并更新控制器以接受这种类型的对象。您可能还需要在该参数旁边添加[FromBody]
您的控制器的更新应与
public JsonResult AjaxTester([FromBody] List<Person> _person)
public JsonResult AjaxTester([FromBody]列表\u人)
查询字符串中根本不应发送复杂类型。那么,应该在哪里设置复杂类型?消息正文,GET请求除外。规范说服务器应该忽略GET请求的主体。如果要向GET请求发送复杂对象,它可能不应该是GET。@DaveD的方式与客户端代码中的方式相同?如果没有消息正文,则设置内容类型标头没有任何好处。OP正在发送查询字符串中的值。我们就快到了:我按你说的做了,我的控制器触发正常,但是“\u person”的计数总是为0?我所做的一定有问题…我会回顾我所做的!我已经完成了测试,但仍然不起作用:无论我通过xhr.send(data)发送什么,在服务器端总是空的,即使字符串也不起作用,尽管控制器总是被触发的!是否验证您正在使用setRequestHeader?另外,尝试使用JSON.stringiify(data))。我将用它更新我的答案,以便在代码视图中更容易看到。您可能希望首先尝试在没有列表的情况下进行测试。然后,一旦你得到了工作,把清单加回去