Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.01.2014, 10:57
Профессор
Отправить личное сообщение для Veterinar Посмотреть профиль Найти все сообщения от Veterinar
 
Регистрация: 27.12.2013
Сообщений: 167

Не могу вызвать обработку 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('бульк :-)');
}

Последний раз редактировалось Veterinar, 20.01.2014 в 10:59.
Ответить с цитированием
  #2 (permalink)  
Старый 20.01.2014, 11:18
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Проверь выполняется ли условие в if'e, если выполняется, то понятно почему - у тебя там return стоит. Соответственно до osnSuccess не доходит. Возможно стоит изменить условие.

Посмотри в консоли - может какие то ошибки валятся, попробуй отладить через firebug или в хроме - увидишь наглядно куда и что идет.

Последний раз редактировалось krasovsky, 20.01.2014 в 11:23.
Ответить с цитированием
  #3 (permalink)  
Старый 20.01.2014, 13:20
Профессор
Отправить личное сообщение для Veterinar Посмотреть профиль Найти все сообщения от Veterinar
 
Регистрация: 27.12.2013
Сообщений: 167

Вроде понятно, что с RETURN может не передаваться управление, НО, я убирал его - и ничего не меняется!
Ответить с цитированием
  #4 (permalink)  
Старый 20.01.2014, 13:42
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Veterinar, скрипт newphoto.php точно отсылает "OK"?
Функцию onSuccess точно передаешь при вызове функции upload?
Нажми F12 в браузере - там все ответы гарантирую 100%!!!
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 20.01.2014, 14:08
Профессор
Отправить личное сообщение для Veterinar Посмотреть профиль Найти все сообщения от Veterinar
 
Регистрация: 27.12.2013
Сообщений: 167

Вот же, блин!
Ну, конечно же! Скрипт же отдает XML, а вовсе не ОК!
Не, ну, вот же!

Спасибо, danik.js!
Ответить с цитированием
  #6 (permalink)  
Старый 20.01.2014, 14:16
Профессор
Отправить личное сообщение для Veterinar Посмотреть профиль Найти все сообщения от Veterinar
 
Регистрация: 27.12.2013
Сообщений: 167

Оно, конечно, спасибо!

Только, увы, ничего не дало... передаются данные в PHP и не вызывается и ничего не передается onSuccess
Ответить с цитированием
  #7 (permalink)  
Старый 20.01.2014, 14:53
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Я бы посоветовал разделить onerror и onload. И судя по всему консолью ты не пользуешься. И очень зря потому что без нее скрипты сложнее чем навешивание клика ненаписать.

В конце концов, убери к чету и if и функцию пропиши console.log('Прошло') и смотри в консоли. Упало в консоль?Значит все ок, пробуй просто функцию свою.

Короче твоя ошибка в мелочи где то. Попробуй по разному не долбись в одно и то же.
Ответить с цитированием
  #8 (permalink)  
Старый 20.01.2014, 16:43
Профессор
Отправить личное сообщение для Veterinar Посмотреть профиль Найти все сообщения от Veterinar
 
Регистрация: 27.12.2013
Сообщений: 167

Так в том и дело, что в отладчике не успеваю перехватить событие - сразу переводит на серверный скрипт!
Ответить с цитированием
  #9 (permalink)  
Старый 20.01.2014, 23:06
Профессор
Отправить личное сообщение для Veterinar Посмотреть профиль Найти все сообщения от Veterinar
 
Регистрация: 27.12.2013
Сообщений: 167

Поставил вывод 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....

Уважаемые! Помогите пожалуйста!
Ответить с цитированием
  #10 (permalink)  
Старый 21.01.2014, 00:30
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

функция onreadystatechange вызывается несколько раз. Тебя должен интересовать только случай когда xhr.readyState == xhr.DONE - только тогда будет доступен response.
Свойство responseXML будет доступно только если сервер выставил правильный заголовок Content-Type (application/xml). А вобще, xml не модно. Нынче JSON практикуется повсеместно.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемма с jquery fancybox, не могу понять в чем дело! bandesign jQuery 1 16.09.2013 16:35
Как правильно вызвать функцию Mateus jQuery 1 16.12.2012 15:43
Не могу вызвать функцию из тела, подскажите что не так Rentony Элементы интерфейса 3 15.12.2011 13:43
Скрипт калькулятора (не могу добавить еще одно значение) Jee_Day Я не знаю javascript 2 22.05.2009 13:19
Не могу получить высоту из css asci Общие вопросы Javascript 5 30.03.2009 13:31