За последние 24 часа нас посетили 24464 программиста и 1726 роботов. Сейчас ищут 1898 программистов ...

ужс! в осле работает а в Опере не пашет!!

Тема в разделе "JavaScript и AJAX", создана пользователем Mr.M.I.T., 27 июн 2008.

  1. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    [js]function ajax_listing(val,fild) {
    var ajax=new JsHttpRequest();
    ajax.onreadystatechange = function() {
    document.getElementById('ajaxload').style.visibility='visible';
    window.scrollTo(0,0);
    if (ajax.readyState == 4) {
    document.getElementById('ajaxload').style.visibility='hidden';
    document.getElementById('workfild'+fild).innerHTML=ajax.responseText;
    if (ajax.responseJS) {
    alert(ajax.responseJS.msg);
    }
    }
    }
    ajax.open("POST","sis/ajax/ajax_listing.php",true);
    ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    ajax.send('val='+val);
    }
    [/js]
    В опере ajax.readyState всегда 1!
    Надо понимать что проблема с путём к пхп файлу в ajax.open("POST","sis/ajax/ajax_listing.php",true);
    Но я уже по всякому попробовал, даже абсолютный путь указывал!
    охх уж не думал что когда-нибудь это скажу...но, как победить оперу?
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    UP!
    У меня ведь на сайте http://soundlib.msk.ru/ тоже эта библиотека и всё работает! вот только хз почему...
     
  3. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Mr.M.I.T.
    Может глупость, но полный путь пробовал поставить?
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
  5. Nazorei

    Nazorei Активный пользователь

    С нами с:
    1 фев 2007
    Сообщения:
    228
    Симпатии:
    0
    .innerHTML = '';

    Опера не поддерживает это.
     
  6. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    Не врите.
     
  7. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    поддерживает...
     
  8. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    не я вообще пад стулом =))
    Это мой первый скрипт который не работает в опере но работает в ослике [​IMG] [​IMG]
     
  9. Nazorei

    Nazorei Активный пользователь

    С нами с:
    1 фев 2007
    Сообщения:
    228
    Симпатии:
    0
    eduha
    нуну)
    он использует Аякс и пытается записать результат запроса в див
    document.getElementById('workfild'+fild).innerHTML = ajax.responseText;
    в ИЕ работает, а Опера такое не позволяет сделать.

    хотя хз, но при использовании аякса с оперой и у меня проблемы :p

    мой совет в этой ситуации использовать что-то наподобии prototype или jquery ...
     
  10. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Nazorei
    А как зависит аякс и свойство innerHTML, что Вы так говорите, мол они не работают вместе.
    innerHTML сейчас поддерживается большинством браузеров, а уж тем более большой тройкой, хотя и не входит в стандарт DOM.
     
  11. eduha

    eduha Активный пользователь

    С нами с:
    8 ноя 2006
    Сообщения:
    278
    Симпатии:
    0
    Адрес:
    Караганда
    Nazorei
    Еще раз, не врите. innerHTML Опера поддерживает, если не ошибаюсь, с 7-й версии.
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    проверено на Опера 8 =)
     
  13. Nazorei

    Nazorei Активный пользователь

    С нами с:
    1 фев 2007
    Сообщения:
    228
    Симпатии:
    0
    eduha
    Тогда помогите товарищу Mr.M.I.T., почему в innerHTML Опера нифига не пишит? ) (в IE и FF работает)

    document.getElementById('workfild'+fild).innerHTML=ajax.responseText;

    Честно говоря не знаю на счет последних версий Оперы, но где-то полгода назад такое не работало )
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    не работает вот это:
    if (ajax.readyState == 4) {
    Опера пишет: инвалид код ин бэкэнд
    из чего следует путь к бэкэнду в запросе опера не понимает
     
  15. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    А объект ajax передан в функцию? Или он глобальный?
     
  16. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    var ajax=new JsHttpRequest();
    создаётся в функции..
    Зы. в первом посту вся функция =)
     
  17. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Mr.M.I.T.
    если у вас "инвалид код ин бэкэнд" значит смотрите, что вам отдает серверный скрипт.
    Вы же используете не чистый AJAX а его реализацию библиотекой JsHttpRequest, а у неё есть определенный формат общения с сервером.
    А насчет пути - неужели нельзя посмотреть в логах были обращения к бекенду или нет? Если были, то стопудово проблема в том, что ответ сервера неверный приходит.
     
  18. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    проверил
    PHP:
    1. $fp=fopen('log.txt',"a+");
    2.                  fputs($fp,"OK");
    3.                  fclose($fp);
    хм...точно были
    А почему тогда в других браузерах работает? вообще бэкэнд отдаёт html и что там может быть не так понять сложно...
     
  19. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Вы описание по ссылке читали? Никакого html в бекенде быть не должно. А должен быть JSON или в случае использования загрузчика SCRIPT (что и происходит в восьмой опере, т.к. нету там чистого аякса) нечто подобное:
    [js]JsHttpRequest.dataReady({ id: ..., js: ..., text: ...})[/js]
    и если я не ошибаюсь, то для этой библиотеки есть собственный класс на php, который и отвечает за работу бекенда, отдавая данные именно в том формате, который просит клиент.
    Соответственно пример использования этого класса есть там же (листинг 5).

    Скорее всего это просто опера отличилась, плюс потому что вы используете responseText а не responseJS. В любом случае в других браузерах при наличии консоли в нее наверняка тоже выдается это же сообщение об ошибке.
     
  20. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    так..а почему тут http://soundlib.msk.ru/ всё нормально работает даже в опере 0о, там тоже html возвращается
    Да, но в этом же листинге есть и простой html
     
  21. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    да, но там еще есть вот это:
    PHP:
    1. require_once "../../lib/JsHttpRequest/JsHttpRequest.php";
    2. // Init JsHttpRequest and specify the encoding. It's important!
    3. $JsHttpRequest =& new JsHttpRequest("windows-1251");
    4.  
    Данный класс заворачивает весь поток вывода в буфер а затем отдает его, но не в чистом виде, а именно в том, который у него запросил клиент.
    А по поводу soundlib - вы голосовалку имели ввиду? Так там нифига не html возвращается :)
    Посмотрите в Firebug или в DeveloperConsole Оперы - самый настоящий JSON, а html ваш находится в свойстве text (откуда он потом и попадает в responseText)
     
  22. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    это есть во всех бэкэндах, без этого jshttprequest вообще не работает, не в одном браузере
    так что...проблема значит не в бэкэнде?
     
  23. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Возможно. Я ведь оперирую только приведенным сообщением об ошибке. Кстати, как оно точно выглядит?
    JavaScript code generated by backend is invalid! - оно?
    И посмотрите все-таки в DeveloperConsole что там у вас возвращается с сервера (HTTP->Start Log).
     
  24. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Да, оно
    А разве в 8 опере есть DeveloperConsol?
    она вроде только в 9, а в 9 всё норм работает =)

    Зы. возможно проблема в самой либе?
     
  25. Ивашка

    Ивашка Активный пользователь

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Ну если вы про восьмую версию, то ничем не могу помочь. При ее разработке программисты Opera Software видимо не выходили из запоя, поэтому там каждый билд нес новые неуловимые баги :(
    Ну и соответственно там нету никакого аякса, а JsHttpRequest в этом случае работает через динамически создаваемый тег script. Как это все отлаживать - хз, единственное, что приходит в голову - перейти на девятую версию, а на это старье забить.