Предположим, что у нас имеется некоторый js объект, основной функцией которого является отправка ajax запросов. ( Для определённости назовём его 
ajaxObj, запрос выполняется методом 
ajaxObj.query() ). Пусть для отправки данных серверу нам необходимо передать методу 
query() js объект в виде пар ключ значение. Пример:
var data = { key_1: ‘some_data_1’, 
             key_2:’some_data_2’ … 
           };
. 
JS работает с кодировкой 
utf-8, а на сервере в большинстве случаев  имеем 
windows-1251. Для корректной передачи данных от сценария JS их нужно закодировать. Таким образом наш JS запрос будет выглядеть так: 
ajaxObj.query( { key_1 : encodeURIComponent( ‘some_data_1’ ), 
                 key_2 : encodeURIComponent( ‘some_data_2’ ), 
                 key_3 : encodeURIComponent( ‘some_data_3’ )… 
             } );
Приём данных сервером.
Пусть заранее известно, что на сервере используется PHP, кодировка windows-1251, а данные предаются методом POST ( через массив $_POST ). Тогда, чтобы получить адекватные данные используем следующий код:
foreach ( $_POST as &$v ) {
    if ( !is_int( $v ) )
       $v = iconv( 'utf-8', 'windows-1251', urldecode( $v ) );
}
Далее работаем с массивом  $_POST, так как будто передача шла не через  JS, а как обычно.
Пусть в результате серверных операций мы получили массив $result, данные которого нам нужно вернуть  в JS скрипт. Поступаем с точностью да на оборот.
foreach ( $result as &$v ) {
    if ( !is_int( $v ) )
        $v = iconv( 'windows-1251', 'utf-8', $v );
}
Далее посылаем заголовок, в котором указываем, что данные будут отправлены в 
UTF-8 ( В данном конкретном случае в заголовке по мимо кодировки указано, что данные будут отправлены в формате json)
header("Content-Type: x-json; charset=UTF-8");
А затем отправляем сами данные. ( функции jencode – не существует, я просто хочу сказать что в данном случае массив  $result кодируется в json формат, для решения этой задачи существуют PHP библиотеки, а в PHP 5 есть встроенная функция. )
echo jencode( $result );