Не могу вызвать обработку xhr.responseXML
Умоляю! Подскажите, пожалуйста!
Данные отправляются на сервер XMLHttpRequest. Всё передаётся, возвращается с сервера правильный XML. Только не могу понять почему не вызывается функция с обработкой ответа сервера. Просто вызывается скрипт PHP и не отдаётся обратно в JS. Только, пожалуйста без издёвок! Я только ещё начинаю разбираться... Вот JS отправляющий данные и тот, который должен принять ответ в нём вообще всё убрано - пусть хотя бы чо-нить булькнет а alert-е... function upload(file, onSuccess, onError, onProgress) { var xhr = new XMLHttpRequest(); xhr.onload = xhr.onerror = function() { if(this.status != 200 || this.responseText != 'OK') { onError(this); return; } onSuccess(xhr.responseXML); return false; // тут ставил true и ваще ничего не ставил и вовсе без "return" - результат один - фигу. } xhr.upload.onprogress = function(event) { onProgress(event.loaded, event.total); } xhr.open("POST", "newphoto.php", true); xhr.send(file); } function onSuccess(responseXML){ alert('бульк :-)'); } |
Проверь выполняется ли условие в if'e, если выполняется, то понятно почему - у тебя там return стоит. Соответственно до osnSuccess не доходит. Возможно стоит изменить условие.
Посмотри в консоли - может какие то ошибки валятся, попробуй отладить через firebug или в хроме - увидишь наглядно куда и что идет. |
Вроде понятно, что с RETURN может не передаваться управление, НО, я убирал его - и ничего не меняется!
|
Veterinar, скрипт newphoto.php точно отсылает "OK"?
Функцию onSuccess точно передаешь при вызове функции upload? Нажми F12 в браузере - там все ответы гарантирую 100%!!! |
Вот же, блин!
Ну, конечно же! Скрипт же отдает XML, а вовсе не ОК! Не, ну, вот же! Спасибо, danik.js! |
Оно, конечно, спасибо!
Только, увы, ничего не дало... передаются данные в PHP и не вызывается и ничего не передается onSuccess |
Я бы посоветовал разделить onerror и onload. И судя по всему консолью ты не пользуешься. И очень зря потому что без нее скрипты сложнее чем навешивание клика ненаписать.
В конце концов, убери к чету и if и функцию пропиши console.log('Прошло') и смотри в консоли. Упало в консоль?Значит все ок, пробуй просто функцию свою. Короче твоя ошибка в мелочи где то. Попробуй по разному не долбись в одно и то же. |
Так в том и дело, что в отладчике не успеваю перехватить событие - сразу переводит на серверный скрипт!
|
Поставил вывод responseXML и responseText - и тот, и другой пустые. Почему? - при вызове серверного скрипта возвращается валидный XML. Данные на сервере сохраняются.
Нихрена не понимаю! Где глюк, подскажите! function log(html) { document.getElementById('beforeshow').innerHTML = html; } function onSuccess(responseXML) { alert('Вызвана onSuccess\n'+responseXML); } function onError() { log('error'); } function onProgress(loaded, total) { log(loaded + ' / '+ total); } //------------------- var form = document.forms.newphoto; form.onsubmit = function() { var file = this.elements.file.files[0]; if (file) upload(file, onSuccess, onError, onProgress); } function upload(file, onSuccess, onError, onProgress) { var xhr = new XMLHttpRequest(); xhr.open("POST", "newphoto.php", true); xhr.onreadystatechange = function() { alert('upload: \n'+xhr.responseText+'\n'+xhr.responseXML); // оба пустые! :( onSuccess(xhr.responseText); return; }; xhr.send(file); // console.log('Прошло'); } При вызове алерта из функции upload успеваю заметить сообщение и запускает серверный скрипт с XML.... Уважаемые! Помогите пожалуйста! |
функция onreadystatechange вызывается несколько раз. Тебя должен интересовать только случай когда xhr.readyState == xhr.DONE - только тогда будет доступен response.
Свойство responseXML будет доступно только если сервер выставил правильный заголовок Content-Type (application/xml). А вобще, xml не модно. Нынче JSON практикуется повсеместно. |
Часовой пояс GMT +3, время: 12:08. |