为什么我不能用ajax将参数发送到action方法?

J.P*_*J.P 1 c# asp.net-mvc jquery

此代码无需发送参数即可运行:

$(function () {
        $('#Fee').on('focus', function () {
            $.ajax({
                url: '@Url.Action("GetFee")', 
                dataType: "json", 
                type: "POST",
                contentType: 'application/json; charset=utf-8', 
                cache: false, 
                data: { }, 
                success: function (data) {
                    if (data.success) {
                        $('#Fee').val(data.message);
                    }
                }
            });
        });
    });
Run Code Online (Sandbox Code Playgroud)

但是,如果我想将参数发送到GetFeeaction方法,它将不再起作用:

data: { bookname : 'book1' }
Run Code Online (Sandbox Code Playgroud)

我改变了我的动作方法来接受参数:

[HttpPost]
public ActionResult GetFee(string bookname)
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 9

你表示:

contentType: 'application/json; charset=utf-8',
Run Code Online (Sandbox Code Playgroud)

所以请确保您尊重您声称要发送到服务器的内容:

data: JSON.stringify({ bookname : 'book1' })
Run Code Online (Sandbox Code Playgroud)

另一方面,如果你application/json在请求中删除了这个内容类型,jQuery将application/x-www-form-urlencoded默认使用,然后你可以简单地使用它:

data: { bookname : 'book1' }
Run Code Online (Sandbox Code Playgroud)

  • 它将您拥有的javascript对象(`{bookname:'book1'}`)序列化为JSON字符串:`"{{"bookname \":\"book1 \"}"`并通过线路发送此JSON字符串.当你写`data:{bookname:'book1'}`这里是通过网络发送的内容:`bookname = book1`,你可以看到它不是一个有效的JSON字符串.请使用浏览器的内置开发人员工具栏检查发送到服务器的有效负载中这些方法之间的差异.还有结帐:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify (4认同)