[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); Но я уже по всякому попробовал, даже абсолютный путь указывал! охх уж не думал что когда-нибудь это скажу...но, как победить оперу?
UP! У меня ведь на сайте http://soundlib.msk.ru/ тоже эта библиотека и всё работает! вот только хз почему...
eduha нуну) он использует Аякс и пытается записать результат запроса в див document.getElementById('workfild'+fild).innerHTML = ajax.responseText; в ИЕ работает, а Опера такое не позволяет сделать. хотя хз, но при использовании аякса с оперой и у меня проблемы мой совет в этой ситуации использовать что-то наподобии prototype или jquery ...
Nazorei А как зависит аякс и свойство innerHTML, что Вы так говорите, мол они не работают вместе. innerHTML сейчас поддерживается большинством браузеров, а уж тем более большой тройкой, хотя и не входит в стандарт DOM.
eduha Тогда помогите товарищу Mr.M.I.T., почему в innerHTML Опера нифига не пишит? ) (в IE и FF работает) document.getElementById('workfild'+fild).innerHTML=ajax.responseText; Честно говоря не знаю на счет последних версий Оперы, но где-то полгода назад такое не работало )
не работает вот это: if (ajax.readyState == 4) { Опера пишет: инвалид код ин бэкэнд из чего следует путь к бэкэнду в запросе опера не понимает
Mr.M.I.T. если у вас "инвалид код ин бэкэнд" значит смотрите, что вам отдает серверный скрипт. Вы же используете не чистый AJAX а его реализацию библиотекой JsHttpRequest, а у неё есть определенный формат общения с сервером. А насчет пути - неужели нельзя посмотреть в логах были обращения к бекенду или нет? Если были, то стопудово проблема в том, что ответ сервера неверный приходит.
проверил PHP: $fp=fopen('log.txt',"a+"); fputs($fp,"OK"); fclose($fp); хм...точно были А почему тогда в других браузерах работает? вообще бэкэнд отдаёт html и что там может быть не так понять сложно...
Вы описание по ссылке читали? Никакого html в бекенде быть не должно. А должен быть JSON или в случае использования загрузчика SCRIPT (что и происходит в восьмой опере, т.к. нету там чистого аякса) нечто подобное: [js]JsHttpRequest.dataReady({ id: ..., js: ..., text: ...})[/js] и если я не ошибаюсь, то для этой библиотеки есть собственный класс на php, который и отвечает за работу бекенда, отдавая данные именно в том формате, который просит клиент. Соответственно пример использования этого класса есть там же (листинг 5). Скорее всего это просто опера отличилась, плюс потому что вы используете responseText а не responseJS. В любом случае в других браузерах при наличии консоли в нее наверняка тоже выдается это же сообщение об ошибке.
так..а почему тут http://soundlib.msk.ru/ всё нормально работает даже в опере 0о, там тоже html возвращается Да, но в этом же листинге есть и простой html
да, но там еще есть вот это: PHP: require_once "../../lib/JsHttpRequest/JsHttpRequest.php"; // Init JsHttpRequest and specify the encoding. It's important! $JsHttpRequest =& new JsHttpRequest("windows-1251"); Данный класс заворачивает весь поток вывода в буфер а затем отдает его, но не в чистом виде, а именно в том, который у него запросил клиент. А по поводу soundlib - вы голосовалку имели ввиду? Так там нифига не html возвращается Посмотрите в Firebug или в DeveloperConsole Оперы - самый настоящий JSON, а html ваш находится в свойстве text (откуда он потом и попадает в responseText)
это есть во всех бэкэндах, без этого jshttprequest вообще не работает, не в одном браузере так что...проблема значит не в бэкэнде?
Возможно. Я ведь оперирую только приведенным сообщением об ошибке. Кстати, как оно точно выглядит? JavaScript code generated by backend is invalid! - оно? И посмотрите все-таки в DeveloperConsole что там у вас возвращается с сервера (HTTP->Start Log).
Да, оно А разве в 8 опере есть DeveloperConsol? она вроде только в 9, а в 9 всё норм работает =) Зы. возможно проблема в самой либе?
Ну если вы про восьмую версию, то ничем не могу помочь. При ее разработке программисты Opera Software видимо не выходили из запоя, поэтому там каждый билд нес новые неуловимые баги Ну и соответственно там нету никакого аякса, а JsHttpRequest в этом случае работает через динамически создаваемый тег script. Как это все отлаживать - хз, единственное, что приходит в голову - перейти на девятую версию, а на это старье забить.