Как передать несколько параметров в контроллер MVC из jQuery $ .ajax ()? - PullRequest
2 голосов
/ 16 мая 2011

Это то, что я делаю для построения данных:

for (var i = args.length; i < args.length; i += 2) {
    if (args.length != 0) args += ','; 
    args += '"' + arguments[i] + '":"' + arguments[i + 1] + '"';
}

Вот как я звоню:

$.ajax({
        type: "GET",
        url: "/blog/GetPosts",
        //data: "{" + args + "}",                    <- gives 500 in 1.6 but works in 1.3
        data: "app=blog&id=100&page=2&pagesize=10",  <- this works
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (res) {},
        error: function (xhr, status, error) {}
});

Как построить данные с несколькими параметрами и передать их контроллеру?Мне нужно зациклить и построить данные, поскольку у меня переменная длина параметров.

Обратите внимание, что это работает: data: "app = blog & id = 100 & page = 2 & pagesize = 10"

Но я могу& abc = что-то в самих данных, которое будет рассматриваться как другой параметр.

Спасибо за чтение

Ответы [ 5 ]

2 голосов
/ 16 мая 2011

Не создавайте строковое представление объекта, вместо этого создайте объект. Кроме того, ваш цикл неправильный, поэтому он не будет правильно получать значения из массива.

var data = {};
for (var i = 0; i < arguments.length; i += 2) {
  data[arguments[i]] = arguments[i + 1];
}

Теперь используйте переменную в вызове:

$.ajax({
  type: "GET",
  url: "/blog/GetPosts",
  data: data,
  ...
2 голосов
/ 16 мая 2011

Вам не нужно передавать строку запроса в данные.Если вы передаете несколько значений, вы должны передать объект.

$.ajax({
        type: "GET",
        url: "/blog/GetPosts",
        data: {
            app: 'blog',
            id: 100,
            page: 2
            pagesize: 10
        },
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (res) {},
        error: function (xhr, status, error) {}
});

jQuery будет обрабатывать кодировку URL для вас.

1 голос
/ 16 мая 2011

data: JSON.stringify(someObject)

Сохраните данные ключа / значения в объекте, затем передайте строковую версию в data

0 голосов
/ 16 мая 2011

data: "app=blog&id=100&page=2&pagesize=10" работает, а этот //data: "{" + args + "}" - нет Потому что вы используете «GET» в качестве типа запроса. для отправки данных вам нужен запрос типа «POST», запрос GET может отправлять только параметры вместе с URL.

0 голосов
/ 16 мая 2011

Похоже, вам нужно использовать encodeURIComponent для кодирования значений параметров, которые имеют специальные символы, такие как &, + или =. Вы также можете проверить сравнение между escape(), encodeURI() и encodeURIComponent().

В качестве альтернативы вы можете использовать $.serialize()

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