JQuery $ .getJSON добавляет знак вопроса к URL запроса - PullRequest
3 голосов
/ 10 мая 2010

У меня есть следующий код запроса JSON в веб-приложении ASP.NET MVC:

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. Почему там находится знак вопроса? Я получаю сообщение об ошибке сервера Словарь параметров содержит пустую запись для параметра 'id' не обнуляемого типа 'System.Int32' ....

Если я сделаю запрос вручную без знака вопроса, он будет работать нормально.

Ответы [ 6 ]

5 голосов
/ 10 мая 2010

Параметры в URL идут по определению после "?". В MVC параметры маршрута на самом деле являются не параметрами (для веб-браузера), а частью пути. Таким образом, правильный код будет:

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

Замените null списком параметров, когда ваш контроллер фактически принимает дополнительные значения, отсутствующие в маршруте 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 голосов
/ 10 мая 2010

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, просто добавьте идентификатор к URL-адресу и поместите { } вместо параметра данных.

1 голос
/ 10 мая 2010

Вы делаете запрос GET и передаете пару имя / значение в качестве второго аргумента, который является аргументом для data, который будет указан в запросе. jQuery автоматически добавляет ?, потому что это необходимо для правильной отправки пары имя / значение.

Попробуйте передать null в качестве второго параметра, если вы не хотите отправлять какие-либо данные.

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

1 голос
/ 10 мая 2010

Так работает функция getJSON. Будет работать следующее:

 $.getJSON('/Person/GetPerson/'+userID,, function(data) {
        });
1 голос
/ 10 мая 2010

Он передает идентификатор пользователя, указанный вами в getJSON, как строку запроса, что является довольно стандартным способом передачи переменных. Можете ли вы поддержать строку запроса на стороне сервера при анализе входящих URL-запросов?

1 голос
/ 10 мая 2010

Поскольку параметры GET отделены от файла знаком вопроса.

Если вам не нужен знак вопроса, добавьте данные непосредственно к URL-адресу и пропустите пустой объект данных (также может работать ноль)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...