[英]jQuery AJAX not sending data
这是我的jQuery / JS代码:
var selectedMonths = [];
var selectedLocations = [];
var selectedEvents = [];
$("#filter").click(function ()
{
$('#months li').each(function ()
{
if ($(this).find('input[type=checkbox]').is(':checked'))
{
selectedMonths.push($(this).find('a').attr('data-value'));
}
});
$('#locations li').each(function () {
if ($(this).find('input[type=checkbox]').is(':checked')) {
selectedLocations.push($(this).find('a').attr('data-value'));
}
});
$('#events li').each(function () {
if ($(this).find('input[type=checkbox]').is(':checked')) {
selectedEvents.push($(this).find('a').attr('data-value'));
}
});
var months = { months: selectedMonths };
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: '/Shop/FilterRinglet',
data: months,
traditional: true,
success: function (result) {
alert("success");
},
failure: function (response) {
alert(response);
}
});
});
这是我的简单控制器:
[HttpPost]
public ActionResult FilterRinglet(List<string> months)
{
return Json(new { x = "sdg", received = "ok" });
}
但是Chrome DevTools仅显示500-内部服务器错误。
我想将三个字符串数组发送到该控制器(例如,您仅看到发送一个字符串数组的尝试)。
我尝试了这一点( 如何在不使用表单的情况下将字符串数组发布到ASP.NET MVC Controller? )以及其他答案。 我无法解决这个问题,您能告诉我隐藏我的错误的地方吗?
编辑:我也尝试了下面的代码行
var months = JSON.stringify({ months: selectedMonths });
selectedMons看起来像这样
那不会导致500,但是在控制器中看起来像这样:
Edit2:我也尝试过:
$.post('/Shop/FilterRinglet', { 'months[]': selectedMonths }, function (response) {
alert(response);
});
但除了""
以外,其他任何内容都无法到达控制器。
编辑3:
我变了
[HttpPost]
public ActionResult FilterRinglet(List<string> months)
至
[HttpPost]
public ActionResult FilterRinglet(string[] months)
但仍然没有成功。
编辑4:
我还创建了一个课程
public class RingletData
{
public List<string> months { get; set; }
}
并相应地更改了方法。 月份仍为""
。
您是否尝试过使用JSON.stringify并将传统设置为false。 我不相信这些一起工作。
(我本来会留此作为评论,但我没有足够的代表)。
因此,经过数小时的研究并结合了不同的方法,我提出了以下解决方案:
// old line, needs to be changed: var months = { months: selectedMonths };
// new line, already contains the other arrays:
var data = JSON.stringify({ months: selectedMonths, locations: selectedLocations, events: selectedEvents });
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
type: 'POST',
url: '/Shop/FilterRinglet',
data: data,
traditional: true,
success: function (result) {
alert("success");
},
failure: function (response) {
alert(response);
}
});
控制器:
[HttpPost]
public ActionResult FilterRinglet(RingletData data)
{
...
}
重要的是,如果使用JSON.stringify(...)
,不要忘记contentType: "application/json"
。 这是我的错误,因为在不同的试验和错误中我忘了使用它-但我不知道在使用JSON.stringify(...)
时有必要
同样,您还应该创建一个对象,例如我的RingletData
:
public class RingletData
{
public string[] months { get; set; }
public string[] locations { get; set; }
public string[] events { get; set; }
}
然后可以使用data.months
访问您发送的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.