我在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'的空条目....
如果我在没有问号的情况下手动发出请求,它可以正常工作。
答案 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
作为第二个参数。