Помогите с GET запросом

12
MJ
На сайте с 29.12.2009
Offline
44
860

Здравствуйте ! Использую модуль SearchFields v5.1 для DLE

У меня значения доп полей русскими словами (например "Диета для похудения")

Такая беда, если не подключать AJAX, все отлично работает, русские символы передаются в таком виде

tipdiety:%C4%EB%FF%20%EF%EE%F5%F3%E4%E5%ED%E8%FF

но если подключить AJAX, то GET запрос выглядит в таком виде, а соответственно не работает:

tipdiety:Для%20похудения

Сам запрос выглядит так:

/* Ajax xf */
$(function(){$('#xf').submit(function(e){e.preventDefault();ShowLoading("Идет сортировка");var m_data=$(this).serialize();$.ajax({type:"GET",url:"/",data:m_data,success:function(data){$('#dle-content').empty($('#dle-content',data).html());$('#dle-content').prepend($('#dle-content',data).html());},error:function(data){DLEalert('Объектов, удовлетворяющих параметрам запроса, не обнаружено','Ошибка')}});HideLoading("Завершено");});});

Помогите пожалуйста, нужно чтобы значение обрабатывалось так как в 1-ом варианте, потому как хочу использовать вариант с AJAX.

Заранее спасибо.

siv1987
На сайте с 02.04.2009
Offline
427
#1
MusicJam:
но если подключить AJAX, то GET запрос выглядит в таком виде, а соответственно не работает:

Где вы смотрите что он выглядит в таком виде?

С запросом все нормально. Возможно дело в кодировке. Дебажте в скриптах получаемые данные.

MJ
На сайте с 29.12.2009
Offline
44
#2
siv1987:
Где вы смотрите что он выглядит в таком виде?
С запросом все нормально. Возможно дело в кодировке. Дебажте в скриптах получаемые данные.

Смотрю через консоль Хрома. Запрос выглядит так:

сайт.ру/sf/category:2/tipdiety:/hudeet:%D0%92%D1%81%D0%B5%20%D1%82%D0%B5%D0%BB%D0%BE/teraetsa:/zasrok:/
Failed to load resource: the server responded with a status of 404 (Not Found)

Если без ajax, то работает правильно:

сайт.ру/sf/category:2/tipdiety:/hudeet:%C2%F1%E5%20%F2%E5%EB%EE/teraetsa:/zasrok:/

Как я понял дело действительно в кодировке, она у меня cp1251, насколько я понял бразур обрабатывает и выдает в utf-8, а при get-запросе остаётся cp1251, может я и не прав. Прочитал про urlencode, но не знаю как правильно его вставить, уже по всякому перепробовал...

Хелпзонович
На сайте с 15.06.2005
Offline
133
#3

Долго ковырятся нет времени, но навскидку попробуйте в простыне

/* Ajax xf */
.............

Заменить var m_data=$(this).serialize(); на var m_data=encodeURIComponent($(this).serialize());

Вы там держитесь! Хорошего вам настроения. Здоровья.
MJ
На сайте с 29.12.2009
Offline
44
#4
Хелпзонович:
Заменить var m_data=$(this).serialize(); на var m_data=encodeURIComponent($(this).serialize());

Спасибо большое, но не работает, не возвращает результат, просто скрывает #dle-content

---------- Добавлено 18.01.2015 в 00:35 ----------

Пожалуйста помогите, уже все методы испробовал...

siv1987
На сайте с 02.04.2009
Offline
427
#5
MusicJam:
Пожалуйста помогите, уже все методы испробовал...

Какие методы? Вам же выше ответили - кодировка. И строка %D0%92%D1%81%D0%B5%20%D1%82%D0%B5%D0%BB%D0%BE это подтверждает - это utf-8.

http://javascript.ru/forum/showthread.php?p=138552

$(this).serializeArray()

MJ
На сайте с 29.12.2009
Offline
44
#6
siv1987:
Какие методы? Вам же выше ответили - кодировка. И строка %D0%92%D1%81%D0%B5%20%D1%82%D0%B5%D0%BB%D0%BE это подтверждает - это utf-8.

http://javascript.ru/forum/showthread.php?p=138552
$(this).serializeArray()

Спасибо за ответ ! Я этот топик уже читал, и честноговоря, не очень силён в javascript. Насколько я понял, мне нужно чтобы запрос шёл в cp1251, а не в utf-8. Пожалуйста, помогите мне.

Заменил $(this).serialize() на $(this).serializeArray(), не помогло, всеравно отправляет в utf-8...

Не понимаю почему, сайт у меня полностью на cp1251...

Заранее спасибо.

siv1987
На сайте с 02.04.2009
Offline
427
#7
MusicJam:
Насколько я понял, мне нужно чтобы запрос шёл в cp1251, а не в utf-8. Пожалуйста, помогите мне.

Примерно так. Но вам проще будет перекодировать данные в скрипте, потому что:

Из интернета:

W3C рекомендует использовать функцию "encodeURIComponent()", которая автоматически переводит текст в utf-8 и создает escape-последовательность
MJ
На сайте с 29.12.2009
Offline
44
#8

siv1987, в любом случае, спасибо что уделили мне время. Похоже проблему мне не решить :(

---------- Добавлено 18.01.2015 в 01:47 ----------

А можно ли перекодировать в скрипте данную строку :

$query_string = $_SERVER['QUERY_STRING']; ?

siv1987
На сайте с 02.04.2009
Offline
427
#9
siv1987:
Но вам проще будет перекодировать данные в скрипте

Открыть \engine\modules\search_xf.php

Ниже

$query_string = $_SERVER['QUERY_STRING'];

Добавить


function _recursiveDecode($str, $from, $to, $iteration=0){
if($iteration >= 5){
return $str;
}
if(is_array($str)){
foreach($str as $k => $v){
$str[$k] = _recursiveDecode($v, $from, $to, ++$iteration);
}
}
else{
$str = iconv($from, $to, $str);
}
return $str;
}

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){
$_GET = _recursiveDecode($_GET, 'utf-8', 'windows-1251');
}
MJ
На сайте с 29.12.2009
Offline
44
#10

siv1987, СУПЕР !!! ВСЕ РАБОТАЕТ ТАК КАК НАДО ! Не знаю как Вас благодарить, проблему которую я не мог решить за 5 часов, Вы решили за 5 минут ! СПАСИБО ВАМ ОГРОМНОЕ !!!

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий