Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка JS при использовании Ajax, Не у всех пользователей работает код 
V
    Опции темы
tolik777
Дата 7.1.2007, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: 1
Всего: 2



Использую для своего сайта Ajax, а именно функцию динамической подгрузки данных в select (выбор след. подраздела, в зависимости от выбранного предыдущего). Надеюсь понятно объяснил.
Проблема в том, что у меня на IE6, FF 1.5, Opera 9 все работает как на домашнем компе под Денвером, так и на серваке. Но некоторые пользователи жалуються, что не работает на Opera9, IE6,7, FF2. Сколько не пытался ошибку так и не удалось мне воспроизвести.

Вот мой код на HTML Запроса:
Код

function makeRequest(URL,RZD_NAME,LEVEL) {
    http_request = false;
    
    data = "razdel="+RZD_NAME;
    data += "&level="+LEVEL;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!http_request) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }

    http_request.onreadystatechange = alertContents;
    http_request.open('POST', URL, true);
    http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-Type","charset=windows-1251");
    http_request.send(data);
}


Код

function alertContents() {
    if (http_request.readyState == 4) {    // COMPLETED
        if (http_request.status == 200) {    // HTTP STATUS
            //Здесь моя функция разбора
            
    } else if (status == 400) {
     alert('Неправильный запрос');
    } else if (status == 500) {
     alert('Внутреняя ошибка на сервере');
    } else if (status == 503) {
     var time = requestObj.getResponseHeader('Retry-After')*1000;
     alert('Сервер перегружен. Запрос будет повторен через: '+time+' секунд');
     setTimeout(sendRequest(url,path),time);
    } else {
     alert('Ошибочный ответ сервера');
    };
    }
}


Ну и преведу основные строчки из PHP касающиеся кодировки и вывода данных (весь текст не буду приводить т.к. там MySQL очень много и пр. лабуды), т.к. может в них проблема? :
Код

$razdel_name = $_REQUEST['razdel'];
$lev1razdel = $_REQUEST['lev1razdel'];        //Имя раздела первого уровня
$razdel_name = mysql_escape_string($razdel_name);
$lev1razdel = mysql_escape_string($lev1razdel);

$level = $_REQUEST['level'];

$num_level = substr($level,5,1);
$next_level = 'level'.++$num_level;
$upper_level = $num_level + 1;
if ($num_level < 4) {$sql_count = ", COUNT(DISTINCT level".$upper_level.") as 'count'";}

$razdel_name = iconv("UTF-8", "cp1251", $razdel_name);

.............
.............

//Выдача результата
header("Content-type: text/html; charset=windows-1251");
...............................



Может кто-нибудь на вскидку увидит ошибку, при которой у некоторых пользователей работает, а у некоторых нет (под одними и теме же браузерами)?
PM MAIL WWW ICQ   Вверх
Sardar
Дата 7.1.2007, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



tolik777, редко вижу грамотную работу с XMLHttpRequest, всё правильно. Не пойму только зачем отдавать контент в cp1251, а не в UTF-8, который принимаеться по дефолту всеми браузерами. Также при ошибках лучше на клиенте отказаться от аякса и перейти по прямой ссылке, пусть ограниченно и криво, но контент показать сможешь.

Проси пользователей, пусть опишут что видят на экране, какие попапы всплывают. Для пользователей FF2, пусть глянут в консоль (Tools -> Error Console) и отпишут чего видят.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
vasac
Дата 7.1.2007, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



Извиняюсь за ворчливость. Мне кажется, что ситуацию, когда браузер не поддерживает ajax можно обработать более приятным для конечного пользователя способом, чем выкидывание ему окошка с упоминанием о каком-то "XMLHTTP instance".
PM WWW   Вверх
tolik777
Дата 7.1.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: 1
Всего: 2



Алертов никаких не всплывает. Просто в косноле ошибка JavaScript. К сожалению пока что даже строку в которой ошибка у пользователей выпытать не могу, но думаю это дело времени, должен же попасться продвинутый пользователь.
Просто не пойму если у пользователя включен JavaScript и браузер IE6 и Opera 9, почему может не работать, если у меня (да и у большинства) все работает. Никак не вкурю в чем загвоздка.
А про UTF-8, просто весь сайт у меня в кодировке cp1251, не хочеться одну страничку в UTF-8 мудрить. Хотя вот есть подозрения, может у пользователей не работает как раз из-за выставленной кодировки в их браузере (других мыслей на ум не приходит).
PM MAIL WWW ICQ   Вверх
vasac
Дата 7.1.2007, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



tolik777, так какие пользователи? Страница с этим кодом есть в инете? Тогда дай адресок.
PM WWW   Вверх
tolik777
Дата 8.1.2007, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: 1
Всего: 2



Есть, но там нужно регистрироваться, иметь WebMoney Keeper, чтобы зарегистрирвоаться ну и т.п. Вообщем это не для всех система, такая полузакрытая.
PM MAIL WWW ICQ   Вверх
tolik777
Дата 8.1.2007, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: 1
Всего: 2



Вот, сделал выносную версию: http://%5Bудалено]/ajax.php

Это сообщение отредактировал(а) tolik777 - 8.1.2007, 15:26
PM MAIL WWW ICQ   Вверх
vasac
Дата 8.1.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



Код

    if(document.getElementById('rzd').value != 'empty') { 
        data += "&lev1razdel="+document.getElementById('rzd').value; 

Нет никакого "rzd" на странице.
Есть правда:
Код

<select name="rzd" ...>

Это к нему относится?
PM WWW   Вверх
tolik777
Дата 8.1.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: 1
Всего: 2



Да к нему.

Вот с одним пользователем сейчас тестирую в выносной версии все нормально. А во внутренней ругается на функцию makeRequest(), пишет "Отказано в доступе".
PM MAIL WWW ICQ   Вверх
Sardar
Дата 8.1.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Цитата(tolik777 @  8.1.2007,  13:43 Найти цитируемый пост)
Отказано в доступе

Домен отличается? Или порт другой?


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
tolik777
Дата 8.1.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: 1
Всего: 2



Вообщем закоментировал строчку http_request.setRequestHeader("Content-Type","charset=windows-1251");
И все заработало у пользователя.
Проблема была в том, что походу не передавались или коверкались данные из-за кодировки. Надо как-то по другому думать.
Но у него в IE 7 так и не заработало, хотя во всех остальных браузерах FF 1.5, FF2, Opera 9, IE 6 работает нормально.
Также исправил id="rzd", спасибо.

Добавлено @ 15:27 
Цитата

А во внутренней ругается на функцию makeRequest(), пишет "Отказано в доступе".


Все же не на эту строку ругалось (это по нумерации IE6 на этой), а в IE7 на другую, где-то на catch(e)
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.