这个Ajax调用有什么问题?

时间:2019-06-25 13:35:49

标签: c# ajax model-view-controller

I'm trying to generate the qr code and pop up it in mvc. Below is the code



    $("#generateQRCode").on('click', function (e) {

    //TODO prevent deafualt
    var Details =
    {
        cityId: $('#city_Id').val(),
        cityTypeId: $('#Type_Id').val(),
        busId: $('bus_Id').val(),
        serialId: $('#serial_Id').val(),
        makeId: $('#make_Id').val()

    }

        $.ajax({
        traditional: true,
        async: true,
        type: 'GET',

       // headers: { 'X-CSRF-TOKEN': $("input[name='__RequestVerificationToken']").val() },
        url: "/Home/Index/",
        dataType: 'json',
        contentType: 'application/json',
        data: JSON.stringify(Details),
        //processData: false,
        //cache: false,
        success: function (data) {

            if (data.result === true)
            {
                debugger;
                $("#afterActionConfirmationModal").modal('show');

            }
            else {
                debugger;
                alert("error1");
            }
        },
        error:
            alert("error2"),
    });
    //controller


[HttpGet]
public IActionResult Index(object details)
{
}

当我调试时,我总是得到error2警报代码块,然后转到操作方法,并且对象“详细信息”值填充为值0。没有错误 消息正在显示。请帮帮我

1 个答案:

答案 0 :(得分:4)

  

我总是收到error2警报

因为这不符合您的预期:

error: alert("error2")

这不会将alert()设置为error回调处理程序。这将立即执行alert() ,并将其结果(即undefined)设置为error回调处理程序。因此alert()将显示是否存在错误,因为它将在AJAX调用甚至执行之前显示。

将其包装在用作回调的函数中,就像success回调处理程序一样:

error: function () {
    alert("error2");
}

更新:从下面的评论看来,您还期望C#的object类型有很多优势。该类型没有有用的属性,因此无处可找到要发布到服务器的值。使用自定义类型:

public class Details
{
    public int cityId { get; set; }
    public int cityTypeId { get; set; }
    public int busId { get; set; }
    public int serialId { get; set; }
    public int makeId { get; set; }
}

并使用该类:

public IActionResult Index(Details details)

您可能还需要将JSON.stringify(Details)替换为Details,因为您可能想发送对象本身而不是序列化的字符串。