繁体   English   中英

jQuery AJAX不发送数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM