JQuery $ .getJSON在请求URL中附加一个问号

时间:2010-05-10 10:01:26

标签: jquery asp.net-mvc json http

我在ASP.NET MVC Web应用程序上有以下JSON请求代码:

var userID = 'id=' + $('#namesList').val();
        $.getJSON('/Person/GetPerson/', userID, function(data) {
            $('#collar').text(data.collarNumber);
            $('#name').text(data.Name);
            $('#email').text(data.EmailAddress);
        });

这会创建一个请求,例如:http://localhost:48610/Person/GetPerson/?id=6。为什么那里有问号?我收到服务器错误参数字典包含非可空类型'System.Int32'的参数'id'的空条目....

如果我在没有问号的情况下手动发出请求,它可以正常工作。

6 个答案:

答案 0 :(得分:5)

根据定义,URL中的参数位于“?”之后。在MVC中,路由参数实际上不是参数(对于Web浏览器),而是路径的一部分。因此,正确的代码是:

    var userID = $('#namesList').val();
    $.getJSON('/Person/GetPerson/' + userID, null, function(data) {
        $('#collar').text(data.collarNumber);
        $('#name').text(data.Name);
        $('#email').text(data.EmailAddress);
    });

当控制器实际接受不在MVC路由中的额外值时,将null替换为参数列表。例如,您的控制器可能是:

    public function GetPerson(string id, string type) {
         // your code
    }

你可以这样称呼它:

    var userID = $('#namesList').val();
    var params = "type=XXX";
    $.getJSON('/Person/GetPerson/' + userID, params, function(data) {
        $('#collar').text(data.collarNumber);
        $('#name').text(data.Name);
        $('#email').text(data.EmailAddress);
    });

答案 1 :(得分:2)

getJSON执行GET请求,不会将变量发布到url,而是将它们添加到查询字符串中。而是使用$.post

 $.post('/Person/GetPerson/', { id: $('#id').val() }, function(data) {
        $('#collar').text(data.collarNumber);
        $('#name').text(data.Name);
        $('#email').text(data.EmailAddress);
    }, 'json');

或者当您对网页的语法为/Person/GetPerson/123时,只需将ID附加到网址,然后将{ }放在数据参数的位置。

答案 2 :(得分:1)

因为GET参数与带有问号的文件分开。

如果您不想要问号,请将数据直接附加到URL并传递空数据对象(null也可能有效)

答案 3 :(得分:1)

它将您在getJSON中指定的userID作为查询字符串传递,这是传递变量的一种非常标准的方法。在解析传入的URL请求时,您是否可以支持服务器端的查询字符串?

答案 4 :(得分:1)

这就是getJSON函数的工作方式。以下内容适用:

 $.getJSON('/Person/GetPerson/'+userID,, function(data) {
        });

答案 5 :(得分:1)

您正在发出GET请求并传递名称/值对作为第二个参数,这是在请求中指定data的参数。 jQuery自动附加?,因为它是正确发送名称/值对所必需的。

如果您不想发送任何数据,请尝试传递null作为第二个参数。

http://api.jquery.com/jQuery.getJSON/