Подтвердить что ты не робот

Всегда вызывайте JSON.stringify для данных post для jQuery Ajax

Или любую другую функцию для предварительной обработки ваших данных:)

Из-за моей структуры на стороне сервера мне всегда нужно вызывать JSON.stringify перед отправкой моих данных - ненужным шаблоном, который вы можете забыть добавить.

Сейчас у меня есть:

$.ajax({
    [...]
    data: JSON.stringify({ someData: self.someData }),
    [...]
});

Я бы предпочел:

$.ajax({
    [...]
    data: { someData: self.someData },
    [...]
});

Я просмотрел ajaxSetup, но не могу найти решение для этого, пока что...

Обновление

По какой причине мне это нужно, см. следующий этот вопрос. Я мог бы исправить это на сервере, но сейчас я ищу способ исправить это на клиентах.

4b9b3361

Ответ 1

Нет, нет встроенного способа предварительной обработки ваших данных с объекта в JSON. Однако вы можете использовать ajaxSetup и beforeSend, чтобы сделать это для вас.

$.ajaxSetup({
    beforeSend: function(jqXHR,options){
        if ( options.contentType == "application/json" && typeof options.data != "string" ) {
            options.data = JSON.stringify(options.data);
        }
    }
});

Теперь просто установите для параметра contentType значение application/json для запросов, которым необходимо отправить json на сервер, чтобы он попадал в оператор if.

Ответ 2

Здесь используется альтернативный подход, в котором используется jQuery.prefilter:

$.ajaxPrefilter("json", function(options, originalOptions) {
  options.data = JSON.stringify(originalOptions.data || null);
  options.contentType = "application/json" // content type of *request*
});

$.ajax({
  data: {foo: [1,2,3]},
  dataType: "json" // expected content type of *response* (must match prefilter, above!)
  [...]
});

Поскольку предварительные фильтры соответствуют параметру dataType, мы должны установить его вручную в нашем запросе $.ajax. Если dataType соответствует префильтру ( "json" ), то перед отправкой запроса он преобразует объект data в строку и устанавливает заголовок contentType для соответствия ( "application/json" ).

Имейте в виду, что это глобальное изменение, которое повлияет на ВСЕ будущие запросы $.ajax с dataType: "json"!

Ответ 3

Здесь функция jQuery.prefilter, которую я использую (это лучше, чем метод beforeSend), он будет соответствовать любому типу данных и будет сериализовать любые объект в сообщении или по запросу.

$.ajaxPrefilter(function (options, org) {
    var rtype = options.type.toLowerCase();
    if ((rtype === "post" || rtype === "put") && org.data !== null && typeof org.data === 'object') {
        options.data = JSON.stringify(org.data);
    }
});

надеюсь, что это поможет.

Ответ 4

Пользователь Jquery.getJSON(). Вы можете напрямую получать данные json.

$.getJSON('', function(data) {

//you can use data.
});

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