Есть некая форма, с которой отправляются некие данные, отправляются через функцию $.ajax():
f.on('submit', function (e) {
var d = f.serialize();
e.preventDefault();
$.ajax({
url: u,
type: 'POST',
data: d,
dataType: 'json',
beforeSend: b,
error: function (jqXHR) {
//
},
success: function (data, textStatus, jqXHR) {
// внимание сюда, отдельно радует наличие textStatus и jqXHR.statusText
alert(jqXHR.statusText);
}
});
});
На мой взгляд, более верно передавать сообщения о статусе ответов в специально расположенном для этого месте, в jqXHR.statusText, а data оставлять либо пустым, либо наполнять реальными данными.
В этом случае у нас не будет путаницы с содержанием ответов, когда там бывает то json, то text, который возможно стоит не выводить обычным текстом, а оборачивать в бессмысленный json, ради унификации кода.
Это может быть важным, когда мы используем стандартные функции по обработке submit форм, когда все типы получаемых и отправляемых данных желательно привести к единому виду. Соответственно, в контроллере мы (пытаемся) делаем нечто такое:
public function contactUs(ContactUsRequest $request)
{
// что-нибудь
return response(json_encode([... массив / пустота ...]))
->header('Content-Type', 'application/json')
->header('charset', 'utf-8')
->setStatusCode(201, 'Сообщение успешно отправлено.')
;
}
Проблема в том, что при установке кодировки подобным образом это влияет только лишь на выводимые массив / пустота (я проверял), а вот на statusText - нет, не влияет, получим привычную абракадабру, которая обычно получается при неверной обработке utf-8.
Так вот, вопрос: в чем может быть проблема? У меня лично три варианта:
Зачем мне такой код? В целом незачем, просто изучаю тонкости.
Похоже сам нашел ответ на свой вопрос здесь. Причин не делать так, как я описал, то есть не использовать utf-8 в статусе ответа от сервера, две:
Сборка персонального компьютера от Artline: умный выбор для современных пользователей