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

Pass принимает параметр заголовка в jquery ajax

Когда я проверяю следующий код в консоли Chrome, он показывает мне заголовок запроса Accept:undefined

jQuery.ajax({
        url: _this.attr('href'),
        accepts: "application/json; charset=utf-8",

    });
});

Как установить тип accept как json. Я не хочу устанавливать пользовательский заголовок или использовать beforeSend

4b9b3361

Ответ 2

Есть два альтернативных способа установки заголовка accept, которые приведены ниже:

1) setRequestHeader('Accept','application/json; charset=utf-8');

2) $.ajax({
    dataType: ($.browser.msie) ? "text" : "json",
    accepts: {
        text: "application/json"
    }
});

Ответ 3

В последних версиях jQuery установка "dataType" в соответствующее значение также устанавливает заголовок accepts. Например, dataType: "json" устанавливает заголовок accept в Accept: application/json, text/javascript, */*; q=0.01.

Ответ 4

Другие ответы не отвечают на фактический вопрос, а скорее предоставляют обходные пути, которые являются позором, потому что буквально занимает 10 секунд, чтобы выяснить, какой правильный синтаксис для параметра accepts.

Параметр accepts принимает объект, который сопоставляет заголовок dataType с заголовком Accept. В вашем случае вам не нужно даже передавать объект accepts, так как установка типа данных на json должна быть достаточной. Однако, если вы хотите настроить пользовательский заголовок Accept, это то, что вы делаете:

accepts: {"*": "my custom mime type" },

Откуда я знаю? Откройте исходный код jquery и найдите "accepts". Самая первая находка рассказывает вам все, что вам нужно знать:

    accepts: {
        "*": allTypes,
        text: "text/plain",
        html: "text/html",
        xml: "application/xml, text/xml",
        json: "application/json, text/javascript"
    },

Как вы видите, сопоставления по умолчанию относятся к типам text, html, xml и json.

Ответ 5

Попробуйте следующее:

$.ajax({
        beforeSend: function (xhr){ 
        xhr.setRequestHeader("Content-Type","application/json");
        xhr.setRequestHeader("Accept","text/json");
    }, 
    type: "POST",
    //........
});

Ответ 6

Вы уже определили параметр accepts как тот, который вам нужен, и keyur прав, указав правильный способ его установки, но если вы установите DataType на "json", тогда он автоматически установит значение по умолчанию для accept значение, которое вы хотите по ссылку jQuery. Итак, все, что вам нужно, это:

jQuery.ajax({
    url: _this.attr('href'),
    dataType: "json"
});

Ответ 7

Хотя некоторые из них верны, я нашел довольно запутывающие предыдущие ответы. В то же время OP запросил решение без установки пользовательского заголовка или с помощью beforeSend, поэтому я ищу более четкое объяснение. Надеюсь, мои выводы предоставят свет другим.

Код

jQuery.ajax({
    .... 
    accepts: "application/json; charset=utf-8",
    ....
});

не работает, потому что accepts должен быть PlainObject (не a String) в соответствии с документом jQuery (http://api.jquery.com/jquery.ajax/). В частности, jQuery ожидает нулевые или более пары ключ-значение, связывающие каждый dataType с принятым типом MIME для них. Итак, я наконец использовал:

jQuery.ajax({
    ....
    dataType: 'json',
    accepts: {
        json: 'application/json'
    },
    ....
});

Ответ 8

Я использую jQuery.getJSON( url [, data ] [, success( data, textStatus, jqXHR ) ] ) например:

var url="my.php";
$.getJSON( url, myObj )
.done(function( json ) { ... }) /* got JSON from server */
.fail(function( jqxhr, textStatus, error ) {
    var err = textStatus + ", " + error;
    console.log( "Failed to obtain JSON data from server: " + err );
  }); /* failed to get JSON */

getJSON является сокращением для:

$.ajax({
  dataType: "json",
  url: url,
  data: data,
  success: success
});