Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: отправка ответа на клаент

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
stas0
Отправлено: 05 Декабря, 2013 - 17:13:47
Post Id



Частый гость


Покинул форум
Сообщений всего: 186
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+][+][+]


Клиентская часть отправляет запрос на сервер, а сервер должен отправить ответ с заголовком xml. В итоге что-то не так! Хм

JS
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. function get(url, callback) {
  3.     var request = new XMLHttpRequest();        
  4.     request.open("GET", url);                  
  5.     request.onreadystatechange = function() {  
  6.         if (request.readyState === 4 && request.status === 200) {
  7.             var type = request.getResponseHeader("Content-Type");
  8.             if (type.indexOf("xml") !== -1 && request.responseXML){
  9.                 callback(request.responseXML);            
  10.                                                                 alert("xml");
  11.                                                 }
  12.             else if (type === "application/json"){
  13.                 callback(JSON.parse(request.responseText));
  14.                                                                 alert("json");
  15.                                                 }
  16.                                                 else{
  17.                 callback(request.responseText);            
  18.                                                                 alert("text");
  19.                                                 }
  20.         }
  21.     };
  22.     request.send(null);                        
  23. }
  24.  
  25. get("test.php", function(element){});
  26.  


PHP(test.php)
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. header("Content-type: text/xml; charset: utf-8");
  4. header("Cache-Control: no-store, no-cache, must-revalidate");
  5. header("Cache-Control: post-check=0, pre-check=0", false);
  6. ?>
  7.  


При получении ответа, нужно что бы выводило "xml". Что не так?

(Отредактировано автором: 05 Декабря, 2013 - 17:15:37)

 
 Top
IllusionMH
Отправлено: 05 Декабря, 2013 - 17:28:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




stas0, а дебагер слабо открыть и посмотреть какие данные проверяются в условии?
 
 Top
stas0
Отправлено: 05 Декабря, 2013 - 17:31:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 186
Дата рег-ции: Янв. 2013  


Помог: 0 раз(а)

[+][+][+]


выводит "text". А мне нужно "xml"
 
 Top
IllusionMH
Отправлено: 05 Декабря, 2013 - 17:33:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




stas0, давайте я вам еще раз порекомендую открыть инструмент разработчика, там ваш скрипт и глянуть какие переменные в первом условии получаются, но в этот раз вы мне не ответите строкой из первого сообщения, я и так вижу какой результат и какая причина(посмотрел в дебагаре), а посмотрите

(Отредактировано автором: 05 Декабря, 2013 - 17:33:59)

 
 Top
teddy
Отправлено: 05 Декабря, 2013 - 17:50:08
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




stas0 пишет:
выводит "text". А мне нужно "xml"

Все прозрачно. Обращаем внимание на этот кусок:
CODE (javascript):
скопировать код в буфер обмена
  1. else if (type === "application/json"){
  2.   callback(JSON.parse(request.responseText));
  3.   alert("json");
  4. }else{
  5.   callback(request.responseText);            
  6.   alert("text");
  7. }

У вас application/json? Нет... соответственно попадаем в блок ELSE и видем текст. Может путаете с PHP-ным elseif, в js его нет...
 
 Top
IllusionMH
Отправлено: 05 Декабря, 2013 - 18:10:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




teddy, у автора проблема в первом условии, а не втором. И причем тут пыховский элсиф - непонятно.

http://take[dot]ms/vNSIi

(Отредактировано автором: 05 Декабря, 2013 - 18:11:17)

 
 Top
teddy
Отправлено: 05 Декабря, 2013 - 18:30:14
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




IllusionMH
Точно... не обратил сразу внимание)
тогда нужно просто убрать
CODE (javascript):
скопировать код в буфер обмена
  1. type.indexOf("xml") !== -1 &&

и оставить только
CODE (javascript):
скопировать код в буфер обмена
  1. if (request.responseXML)

по поводу elseif - уже отпадает... я неверно понял изначально )

(Отредактировано автором: 05 Декабря, 2013 - 18:31:44)

 
 Top
IllusionMH
Отправлено: 05 Декабря, 2013 - 18:38:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




teddy, ну вот опять... не нужно ничего убирать. Нужно добавить ответ. А пока его нет, то request.responseXML будет null
 
 Top
teddy
Отправлено: 05 Декабря, 2013 - 18:45:13
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




IllusionMH пишет:
Нужно добавить ответ

имеется ввиду сам xml? если да, то может дебагер так показывает, но если пнуть алертом
responseXML, то результат будет object, а не null, если даже сам XML не пришел от сервера

а если убрать то что я сказал то алерт просто выведет xml(фразу XML, а не его осодержимое), как и нужно было ТС...

(Отредактировано автором: 05 Декабря, 2013 - 18:46:01)

 
 Top
IllusionMH
Отправлено: 05 Декабря, 2013 - 18:48:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




teddy, typeof null
 
 Top
teddy
Отправлено: 05 Декабря, 2013 - 18:53:14
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




IllusionMH
IllusionMH пишет:
typeof null

Я спецом не поленился и проверил, typeof вернул object.
(Добавление)
простой пример
CODE (javascript):
скопировать код в буфер обмена
  1. var obj = new Object();
  2. alert(typeof(obj));

объект есть в любом случае, и от того что он пуст, это не меняет его тип на null

(Отредактировано автором: 05 Декабря, 2013 - 18:55:08)

 
 Top
IllusionMH
Отправлено: 05 Декабря, 2013 - 18:58:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




teddy, окей !!null.

Вот сейчас вы делаете то, что не нужно: пытаетесь доказать что ваше "исправление" верно, и дает результат.
Только вот результат будет истинным даже в том случае, если придет не xml, а жсон или текст.

(Отредактировано автором: 05 Декабря, 2013 - 19:00:45)

 
 Top
esterio
Отправлено: 05 Декабря, 2013 - 18:58:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




teddy неверно, вы проверили просто обект
Мне кажеться ТС просто не отправляет валидный XML, и XHR не может его распарсить(или вовсе не отправляет)
 
 Top
IllusionMH
Отправлено: 05 Декабря, 2013 - 19:01:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




esterio, судя по содержимому файла test.php - ответа вообще нет.
 
 Top
teddy
Отправлено: 05 Декабря, 2013 - 19:03:24
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




esterio
нет XML у ТС,
stas0 пишет:
header("Content-type: text/xml; charset: utf-8");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

вот его серверный файл, который он предоставил в теме...
тоесть имеется всего 2 файла и в зависимости от того какой контент тайп нужно вывести тот или иной алерт...
(Добавление)
IllusionMH
И у вас был промах ))
вполне рабочий вариант
Спойлер (Отобразить)

(Добавление)
при желании можно добавить вывод response, то я сделал по минимуму
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB