Nano Hash - криптовалюты, майнинг, программирование

Разница в поведении $ .ajax POST / non post?

Я пытаюсь отправить некоторые данные через JSON в действие контроллера MVC:

Почему-то это работает:

var items = [];
$("input:checked").each(function () { items.push($(this).val()); });

//This works
$.ajax({
    type: "POST",
    url: url,
    data: { listofIDs: items, personID: personID},
    dataType: "json",
    traditional: true,
    success: function() {
        //Rebind grid
    }
});

//This listofIDs is ALWAYS null !? (longhand for `$.getJSON` ?)
$.ajax({
    url: url,
    dataType: 'json',
    data: { listofIDs: items, personID: personID },
    success: function () {
        //Rebind grid
    }
});

Так почему вверху он работает, а внизу всегда равен нулю? Тот же код используется для сборки items!?

изменить: метод контроллера

public ActionResult AddJson(List<int> listofIDs, int personID)
        {
            if (listofIDs==null || listofIDs.Count < 1)
                return Json(false, JsonRequestBehavior.AllowGet);

...
//Add something to database
//Return true if suceeed, false if not
}

edit: поэтому я решил его, просто превратив массив в строку и отправив ее таким образом. Таким образом я смог отправить больше, чем просто переменную массива.

var items = $(':input:checked').map(function () { return $(this).val();}).toArray();
            var stringArray = String(items);

$.ajax({
                url: url,
                dataType: 'json',
                data: { listOfIDs: stringArray, personID: personID },
                success: function () {
//rebind grid
                }
            });

Обратите внимание, что тип POST указывать не нужно.


  • JFTR в вашем примере вы используете только $ .ajax, а не $ .getJSON 22.08.2011
  • Хорошая точка зрения. У меня было так, поскольку я понимаю, что, поскольку я это написал, это было от руки для $.getJSON. 22.08.2011
  • Я думаю, что ответы ниже на правильном пути лучше POST / GET. Вы смотрели метод JsonRequestBehavior.AllowGet в MVC.NET 22.08.2011

Ответы:


1

Без type: "POST" по умолчанию используется GET (согласно документации), что, вероятно, является не ожидая.

Кроме того, вы можете получить список значений с помощью ...

var items = $(':input:checked').map(function() {
    return $(this).val();
}).toArray();

jsFiddle.

Не уверен, что лучше. Просто идея у меня была :)

22.08.2011
  • Я добавил type: POST в $ .ajax и добавил [HttpPost] в метод контроллера, но массив все еще был нулевым. 22.08.2011

  • 2

    Проблема, вероятно, на стороне сервера. В первом случае вы используете HTTP POST в другом HTTP GET. Это означает, что вам, вероятно, придется обращаться к данным по-другому. Возможно, посмотрите Получите индивидуальные параметры запроса из Uri для случая HTTP GET .

    22.08.2011

    3

    Вы не указываете тип запроса, поэтому по умолчанию используется GET.

    Из jQuery Docs:

    Тип запроса («POST» или «GET»), по умолчанию - «GET».

    Возможно, вы хотели указать POST. Если вы отправите его с помощью GET, массив будет добавлен в QUERY_STRING, как ?listofIDs=..., и не будет доступен так же, как вы обычно получаете доступ к POST-данным.

    22.08.2011
  • Есть ли способ отправить массив в строке запроса, как вы показали? 22.08.2011
  • @baron То, как вы это делаете сейчас, будет отправлено в строке запроса. Нравится: listofIDs[]=item1&listofIDs[]=item2&... 22.08.2011
  • Странный. Пожалуйста, посмотрите мои правки. Я понял, что мне нужно отправить список идентификаторов в виде массива и personID (это родительский идентификатор). Но когда у меня также было personID в данных, он просто отправил personID, поэтому я спросил, как отправить массив в виде строки запроса. Но затем я полностью прокомментировал personID и получил строку запроса, как вы показали. Но я не мог получить это в методе контроллера, List<int> listofIDs все еще был нулевым !? так что я думаю, мне нужно поработать, чтобы отправить его другим способом? 22.08.2011
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..