代码之家  ›  专栏  ›  技术社区  ›  David Neale

jquery$.getjson向请求URL附加问号

  •  3
  • David Neale  · 技术社区  · 14 年前

    我在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 回复  |  直到 14 年前
        1
  •  5
  •   salgiza    14 年前

    根据定义,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路由中的额外值时,用参数列表替换空值。例如,您的控制器可能是:

        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);
        });
    
        2
  •  2
  •   Jan Jongboom    14 年前

    这个 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附加到URL,然后 { } 代替数据参数。

        3
  •  1
  •   ThiefMaster    14 年前

    因为get参数与带有问号的文件分离。

    如果不需要问号,请将数据直接附加到URL,并传递一个空数据对象(也可以使用空值)。

        4
  •  1
  •   Steve Jalim    14 年前

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

        5
  •  1
  •   Gazler    14 年前

    这就是getjson函数的工作原理。以下内容有效:

     $.getJSON('/Person/GetPerson/'+userID,, function(data) {
            });
    
        6
  •  1
  •   Andy E    14 年前

    你在做一个 GET 请求并传递一个名称/值对作为第二个参数,该参数是 data 在请求中指定。jquery自动附加 ? 因为正确发送名称/值对是必需的。

    试着传球 null 如果不希望发送任何数据,则作为第二个参数。

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