Оставьте в покое defaultCharset, зачем она вам нужна?
Вам нужно проверить что возвращает сервер, судя по файлу test.php все нормально. Осталось проверить как принимает сервер, возможно у вас на сервере русский Апач, с которым бывают проблемы (или связка Apache+nginx, и отдает не Apache, а nginx).
Запустите (два файла раздельных, хотя количество роли не играет, что с одного проверять, что с раздельных, без разницы). Ремируйте в htaccess добавление кодировки, и будем считать, что на сервере в настройках она не определена по умолчанию, определять ее будет непосредственно переданный заголовок. НИКАКИХ метатегов о кодировке в документе чтобы не было, document.charset не интересует, тем более что в данном случае это значение может быть и не определено.
<?
header('Content-type: text/html; charset=utf-8');
?>
<!DOCTYPE HTML>
<html>
<head>
<script src="https://code.jquery.com/jquery-1.11.2.js"></script>
<script>
$(function() {
$('form').submit(function() {
$.post('2.php', $(this).serialize(), function(d) {
alert(d)
});
return false;
})
});
</script>
</head>
<body>
<form>
<input name="as" value="Текст" />
<button>Отправить</button>
</form>
</body>
</html>
Это тот кто отвечает на запрос. Его задача - детектирование кодировки запроса и выдача результата.
<?php
$char = detectEncoding($_POST['as']);
header('Content-type: text/html; charset=utf-8');
exit('Кодировка: ' . $char . ', ' . $_POST['as']);
function detectEncoding($s) {
$enc = array('utf-8', 'windows-1251', 'windows-1252');
foreach($enc as $v) {
$chk = iconv($v, $v, $s);
if(md5($chk) == md5($s)) return $v;
}
return 'Не определено';
}
?>
Проверяйте, и каков результат?