[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с responseXML
pavel24071988
Здравствуйте! Помогите пожалуйста.

У меня есть небольшое ajax приложение, сервер посредством soapclient забирает данные с web сервиса в формате xml, и методом responseText на стороне клиента я их получаю спокойно. НО мне НУЖНО наладить responseXML, для перемещения по тегам (другого способа не представляю) - а это очень не получается!!!!

Шапка такая :

xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

Переменная которая уходит на сервер вот такого вида:

var xmlstr = '<?xml version="1.0" encoding="UTF-16LE" standalone="no"?><UserLogin> <row><username>'+ login +'</username><userpass>'+ password +'</userpass><id_kontr /> <n_kontr /> <category /> </row> </UserLogin>';

где login и password - (регистрационная форма)

Метод send вот такой :

xmlhttp.send("xmlstr=" + xmlstr);

Ну и вообщем метод responseText
Вообще-то мне возвращается текст в виде xml строки из которой мне и нужно выудить донные тегов.

Я так понимаю что нужно :
Переписать шапку на

xmlhttp.setRequestHeader("Content-Type", "text/xml");


Но вот как отправить запрос в таком случае что потом responseXML работал не знаю.

Неделю уже не могу сделать, начальство расстраивается.
Заранее спасибо.



Спустя 54 минуты, 7 секунд (27.07.2011 - 16:45) ApuktaChehov написал(а):
Вот скрипт, работает как с responseText так и responseXML. Ковыряйте.

//Создаем объект XMLHttpRequest для работы Ajax в разных браузерах
if(navigator.appName == "Microsoft Internet Explorer")
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); //для Internet Explorer
else
xmlHttp = new XMLHttpRequest(); //для остальных баузеров

//Если, не удалось создать XMLHttpRequest,
//Сообщам пользователю, что чат работать не может

if (!xmlHttp)
alert("Возможно, Ваш браузер устарел или в нем отключена поддержка JavaScript.Работа невозможна.");

//Функция принимает xml данные в качестве первого аргумента.
//Второй аргумент принимает статус операции(получение данных или отправка)
//Третий аргумент это адрес скрипта к которому отправляется запрос.

function callServer(string, url, request_type, func)
{
//Открываем соединение с сервером
//Первый аргумент(POST) - это метод запроса, второй(url) - адрес скрипта, куда мы отправляем запрос.
//Третий аргумент отвечает за тип запроса, может быть синхронный и асинхронный. (см. ниже)

xmlHttp.open("POST", url, true);

//Оправляем серверу заголовок о типе и кодировке данных
if(request_type == 'xml')
xmlHttp.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
else
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");

//Определяем функцию, которая выполнится после ответа cервера
xmlHttp.onreadystatechange = function ()
{
//Запрос xmlhttp регулярно отчитывается о своем состоянии.
//Состояние = 4, означает конец выполнения операций,
//а функция-обработчик проверяет - не настало ли это состояние.

if (xmlHttp.readyState == 4)
{
//Проверяем все ли хорошо. Ответ сервера = 200 обозначает,
//что запрос удовлетворен.

if(xmlHttp.status == 200)
if(request_type == 'xml')
func(xmlHttp.responseXML);
else
func(xmlHttp.responseText);

}
}

//Передаем запрос на сервер
xmlHttp.send(string);
}


Работает вот так:

//Ajax запрос
callServer('param', 'index.php', 'xml',
function (data)
{
alert(data);
});


Не забудьте, что сервер должен отвечать вот так:

header('Content-Type: text/xml; charset=utf-8');
echo('<?xml version="1.0" encoding="utf-8"?>');
А тут тело XML

Спустя 2 часа, 26 минут, 52 секунды (27.07.2011 - 19:12) Guest написал(а):
Спасибо! буду пробовать

Спустя 14 часов, 33 минуты, 27 секунд (28.07.2011 - 09:45) pavel24071988 написал(а):
Прастите, что я не понял, но через SoapClient на сервер, то биш
url = "http://localhost/ajax/post.php";
мне в переменную
$sa_Return
приходит вот что:
<?xml version="1.0" encoding="UTF-16LE" standalone="no"?>

<UserLogin><row><username>
stv</username><userpass>stv</userpass><id_kontr>-1465089266963442925728172886.458368</id_kontr><n_kontr>Семёнкина Т.В.</n_kontr><category>3</category></row></UserLogin>


Для передачи в javascript я должен писать вот так????
header('Content-Type: text/xml; charset=UTF-16LE'); //исправил utf-8 на UTF-16LE
echo($as_Return);


Мне кажется что какую ту малость я упускаю, Просто действительно очень нужно решить эту задачу

Спустя 51 минута, 28 секунд (28.07.2011 - 10:37) pavel24071988 написал(а):
Вот мой код:
html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta
http-equiv="content-type" content="text/html; charset=UTF-16LE" />
<meta
name="author" content="MESMERiZE" />
<meta
http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT" />
<meta
http-equiv="Pragma" content="no-cache" />
<title>
Ассинхронная форма</title>
</head>
<script
type="text/javascript">

function
getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function show() {
var login = document.all("login").value;
var password = document.all("password").value;
var xmlhttp = getXmlHttp()
var xmlstr = '<?xml version="1.0" encoding="UTF-16LE" standalone="no"?><UserLogin> <row><username>'+ login +'</username><userpass>'+ password +'</userpass><id_kontr /> <n_kontr /> <category /> </row> </UserLogin>';
var url = "http://localhost/ajax/postxml.php";
xmlhttp.open('POST', url , true);
xmlhttp.setRequestHeader("Content-Type", "text/xml");
xmlhttp.onreadystatechange = function updatePage() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
var wer = xmlhttp.responseXML;
alert(xmlhttp.responseXML);

}
}
}

xmlhttp.send(xmlstr);
}

</script>
<body>
<form >

Введите имя пользователя
<input type="text" name="login" value="" size="70" cols="40">
<p>
Введите пароль
<input type="password" name="password" value="">
</p>
<p><input
value="Показать" onclick="show()" type="button" /></p>
</form>
</body>
</html>


Это что касается броузера

Сервер (Apach):

<?php
try
{
$client = new SoapClient(Null, array('location' => "http://(порт 8080)/ws_eorder/services/pk_wseorder_ws_framework", 'uri'=> "http://ws_eorder/" ));
$as_Return = $client->rc_userlogin($_POST['xmlstr']);
header('Content-Type: text/xml; charset=UTF-16LE');
echo $as_Return;
?>


При вводе логина и пароля через responseText возвращается
<?xml version="1.0" encoding="UTF-16LE" standalone="no"?>

<UserLogin><row><username>
stv</username><userpass>stv</userpass><id_kontr>-1465089266963442925728172886.458368</id_kontr><n_kontr>Семёнкина Т.В.</n_kontr><category>3</category></row></UserLogin>



Через responseXML возвращается
[Object]


Что же тут не правильно ????????????

Спустя 14 минут, 54 секунды (28.07.2011 - 10:52) ApuktaChehov написал(а):
Ну, вот, все хорошо. Вернулся объект. Т.е. XML документ.
Теперь его нужно распарсить и вытянуть нужное.

Спустя 6 минут, 6 секунд (28.07.2011 - 10:58) pavel24071988 написал(а):
А разве не DOM дерево должно вернутся?

Спустя 3 минуты, 35 секунд (28.07.2011 - 11:01) ApuktaChehov написал(а):
pavel24071988 - да, а как оно по вашему долго отобразиться через alert?
DOM это объект, что он вам и пишет.

Спустя 9 минут, 24 секунды (28.07.2011 - 11:11) pavel24071988 написал(а):
В дебагаре на шаге после шага var wer = xmlhttp.responseXML;
Все значения пустые childNode {...}, ..., xml{...} да и вообще он пишет что значение переменной wer есть {...} Зато тип указывает IXMLDOMDocument2 ???
Так и должно быть, я совсем запутался - значения же пустые, чего я буду парсить?

Спустя 10 минут, 28 секунд (28.07.2011 - 11:21) pavel24071988 написал(а):
Да и еще при вот таком вот маневре
var username = wer.documentElement.getElementsByTagName("username");
alert(username);


Ничего не происходит а броузер сообщает что

document.Element - есть null или не является атрибутом.



:unsure:

Спустя 4 секунды (28.07.2011 - 11:21) ApuktaChehov написал(а):
если responseText, возвращает тело XML в виде строки, то он не может быть пустым, ведь сервер присылает одно и тоже, только с разными заголовками.

Если вы пользуетесь firefox, то там есть отличный фаербаг. В нем можно посмотреть, что вернул сервер, в том числе и в формате XML.

Можно попробовать и так посмотреть:
alert(object.getElementsbByTagName('id_kontr')[0].childNodes[0].nodeValue);


object это объект, которые вернул сервер через аякс

Спустя 7 минут, 58 секунд (28.07.2011 - 11:29) pavel24071988 написал(а):
Переписал

Цитата
alert(wer.getElementsbByTagName('id_kontr')[0].childNodes[0].nodeValue);


wer это вот: [html]
var wer = xmlhttp.responseXML;
alert(xmlhttp.responseXML);
[html]
Дебагер IE выдает ошибку:
Объект не поддерживает это свойство или метод

Спустя 31 секунда (28.07.2011 - 11:30) pavel24071988 написал(а):
wer это вот:

var wer = xmlhttp.responseXML;
alert(xmlhttp.responseXML);

Дебагер IE выдает ошибку:
Объект не поддерживает это свойство или метод

Спустя 4 минуты, 26 секунд (28.07.2011 - 11:34) ApuktaChehov написал(а):
Что то я совсем запутался. Что вам возвращает сервер? Не важно в XML или нет, что он должен вернуть?

Вы вот это:
<?xml version="1.0" encoding="UTF-16LE" standalone="no"?>

<UserLogin><row><username>stv</username><userpass>stv</userpass> <id_kontr>-1465089266963442925728172886.458368</id_kontr><n_kontr>Семёнкина Т.В.</n_kontr><category>3</category></row></UserLogin>

Отправляете на сервер или принимаете с сервера?!

Спустя 5 минут, 23 секунды (28.07.2011 - 11:39) pavel24071988 написал(а):
Принимаю
Если через responseText, методом
document.Write(xmlhttp.responseText)
и смотреть html код страницы, то отображается как раз это
<?xml version="1.0" encoding="UTF-16LE" standalone="no"?>

<UserLogin><row><username>
stv</username><userpass>stv</userpass> <id_kontr>-1465089266963442925728172886.458368</id_kontr><n_kontr>Семёнкина Т.В.</n_kontr><category>3</category></row></UserLogin>


Если через responseXML то document.write возвращает [Object] и в html коде тоже находится [Object]

Спустя 2 минуты, 25 секунд (28.07.2011 - 11:42) ApuktaChehov написал(а):
Дайте мне последнюю версию вашего кода, я поправлю все. А то я уже ничего не понимаю.

Спустя 9 минут, 10 секунд (28.07.2011 - 11:51) pavel24071988 написал(а):
postxml.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta
http-equiv="content-type" content="text/html; charset=UTF-16LE" />
<meta
name="author" content="MESMERiZE" />
<meta
http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT" />
<meta
http-equiv="Pragma" content="no-cache" />
<title>
Ассинхронная форма</title>
</head>
<script
src="jsxml.js" type="text/javascript"></script>
<body>
<form >

Введите имя пользователя
<input type="text" name="login" value="" size="70" cols="40">
<p>
Введите пароль
<input type="password" name="password" value="">
</p>
<p><input
value="Показать" onclick="show()" type="button" /></p>
</form>
</body>
</html>


postxml.php
<?php
try
{
$client = new SoapClient(Null, array('location' => "http://192.168.1.36:8080/ws_eorder/services/pk_wseorder_ws_framework", 'uri'=> "http://ws_eorder/" ));
$as_Return = $client->rc_userlogin($_POST['xmlstr']);
header('Content-Type: text/xml; charset=UTF-16LE');
echo $as_Return;
} catch (Exception $e) {
echo 'check the connecting to EAS!';
}
?>


jsxml.js
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function show() {
var login = document.all("login").value;
var password = document.all("password").value;
var xmlhttp = getXmlHttp()
var xmlstr = '<?xml version="1.0" encoding="UTF-16LE" standalone="no"?><UserLogin> <row><username>'+ login +'</username><userpass>'+ password +'</userpass><id_kontr /> <n_kontr /> <category /> </row> </UserLogin>';
var url = "http://localhost/ajax/postxml.php";
xmlhttp.open('POST', url , true);
xmlhttp.setRequestHeader("Content-Type", "text/xml");

xmlhttp.onreadystatechange = function updatePage() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
var wer = xmlhttp.responseXML;
document.write(xmlhttp.responseXML);
//var username = wer.documentElement.getElementsByTagName("username");
// alert(wer.getElementsbByTagName('id_kontr')[0].childNodes[0].nodeValue);


}
}
}

xmlhttp.send(xmlstr);
}

Вот последний вариант кода

Спустя 12 минут, 24 секунды (28.07.2011 - 12:03) ApuktaChehov написал(а):
Прикрепил архив с тремя файлами. Как и у вас. В серверном скрипте сделал имитацию возврата xml, только в кодировке utf8.


Спустя 11 минут, 19 секунд (28.07.2011 - 12:15) pavel24071988 написал(а):
Спасибо. Работает с имитацией.
А если обратно переписать
<?php
header('Content-Type: text/xml; charset=UTF-8');
$client = new SoapClient(Null, array('location' => "http://192.168.1.36:8080/ws_eorder/services/pk_wseorder_ws_framework", 'uri'=> "http://ws_eorder/" ));
$as_Return = $client->rc_userlogin($_POST['xmlstr']);
echo $as_Return;
//echo '<?xml version="1.0" encoding="UTF-16LE" standalone="no">

//<UserLogin><row><username>stv</username><userpass>stv</userpass&g t;<id_kontr>-1465089266963442925728172886.458368</id_kontr><n_kontr>Семёнкина Т.В.</n_kontr><category>3</category></row></UserLogin>';

?>


То ничего не получается, хотя в переменной
as_Return
хранится строка

<?xml version="1.0" encoding="UTF-16LE" standalone="no"?>

<UserLogin><row><username>
stv</username><userpass>stv</userpass><id_kontr>549003</id_kontr><n_kontr>Семёнкина Т.В.</n_kontr><category>3</category></row></UserLogin>


Мне как раз и это нужно решить

Спустя 5 минут, 21 секунда (28.07.2011 - 12:20) ApuktaChehov написал(а):
1) в какой кодировке у вас данные приходят с вашего Soap?
2) в какой кодировке вы отправляете данные клиенту?
3) в какой кодировке клиент ожидает данные?

И вообще, не нравится мне эта ваша UTF-16LE wink.gif

Спустя 6 минут, 43 секунды (28.07.2011 - 12:27) pavel24071988 написал(а):
1) UTF-16LE
2)В UTF - 16LE (в php на сервере пишу header('Content-Type: text/xml; charset=UTF-16LE') )
3)Это кодировка html странички?

Дело в том что данные с моего soap приходят уже в UTF-16LE

Спустя 5 минут, 8 секунд (28.07.2011 - 12:32) ApuktaChehov написал(а):
Типо того. Я вот уже сколько времени работаю только с одинаковыми кодировками, и все ок было. Т.е. БД, сервер, клиент работают с одной и той же кодировкой.

Если с имитацией все работает, и код у имитатора и от сервера одинаковы и отличаются только кодировками, то проблема именно в кодировках.

Честно говоря, я бы переписал севере, что бы он мне UTF8 отдавал. Если не получится, то даже не знаю. Погуглите, может у JS есть что-то для работы с кодировками. Или конвертните уже у себя в скрипте php из вашей кодировки в utf8.

Как-то так.

Спустя 4 минуты, 26 секунд (28.07.2011 - 12:36) pavel24071988 написал(а):
По поводу конвертнуть:
$in_utf_8=iconv("UTF-16LE", "UTF-8", $as_Return);
echo $in_utf_8;

Так прокатит?

Спустя 9 минут, 25 секунд (28.07.2011 - 12:46) ApuktaChehov написал(а):
Вы меня спрашиваете? Я не в курсе поддерживает ли iconv UTF-16LE. Если поддерживает, то прокатит.

Спустя 6 минут, 32 секунды (28.07.2011 - 12:52) ApuktaChehov написал(а):
В любом случае в этой кодировке ни брузер, ни php не опознали скрипты и не исполнили его. laugh.gif

По этому однозначно, клиентские файлы, вас скрипт, которые принимает данные от soap должны быть в кодировке utf-8. А пришедшие данные надо перекодировать. И в заголовке XML и в заголовках браузеру указать utf8 в место вашей.

Спустя 3 минуты, 6 секунд (28.07.2011 - 12:55) pavel24071988 написал(а):
Спасибо большое.

Но если мне через Soap включать то код на сервере должен быть таким????:

header('Content-Type: text/xml; charset=UTF-8');
$client = new SoapClient(Null, array('location' => "http://192.168.1.36:8080/ws_eorder/services/pk_wseorder_ws_framework", 'uri'=> "http://ws_eorder/" ));
$as_Return = $client->rc_listdoc($_POST['xmlstr']);
echo $as_Return;




Спустя 1 минута, 52 секунды (28.07.2011 - 12:57) ApuktaChehov написал(а):
Вот таким вот примерно. И в XML что вернет сервер, тоже должно быть utf8:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>

header('Content-Type: text/xml; charset=UTF-8');
$client = new SoapClient(Null, array('location' => "http://192.168.1.36:8080/ws_eorder/services/pk_wseorder_ws_framework", 'uri'=> "http://ws_eorder/" ));
$as_Return = $client->rc_listdoc($_POST['xmlstr']);
$in_utf_8=iconv("UTF-16LE", "UTF-8", $as_Return);
echo $in_utf_8;

Спустя 1 час, 51 минута, 17 секунд (28.07.2011 - 14:49) pavel24071988 написал(а):
!!
Вы на сервере прописывали шапку :
header('Content-Type: text/xml; charset=UTF-8');


Но в echo у Вас все равно написана строка с:
<?xml version="1.0" encoding="UTF-16LE" standalone="no"?><...
UTF-16LE

у меня же такаяже строка посредством Soap засовывается в переменую, после ччего я делаю :
echo $переменная из Soap


Я не пойму чего не хватает для responseXML?????????

Поидее и перекодирововать ничего не нужно.......

:wacko: :wacko: :wacko: :wacko: :wacko: :wacko: :wacko: :blink: :blink: :blink: :wacko: :wacko: :wacko: :wacko:

Спустя 14 минут, 15 секунд (28.07.2011 - 15:03) ApuktaChehov написал(а):
pavel24071988 - не хвататет правильной кодировки.
header('Content-Type: text/xml; charset=UTF-8');
- не значит что у вас все сразу станет в кодировке utf-8, это всего лишь значит - сервер сообщает клиенту, что отправляет данные в кодировке utf-8. Но данные которые пришли от Soap в другой кодировке.
Поставьте фаербаг и посмотрите что возвращает сервер. Как вы без фаербага-то работаете? Пальцем в небо?!

Спустя 2 минуты, 24 секунды (28.07.2011 - 15:05) pavel24071988 написал(а):
Но Вы же взяли данные с кодировкой UTF-16LE, те строка
echo '<?xml version="1.0" encoding="UTF-16LE" standalone="no"?><UserLogin><row><username>stv</username><use rpass>stv</userpass><id_kontr>-1465089266963442925728172886.458368</id_kontr><n_kontr>Семёнкина Т.В.</n_kontr><category>3</category></row></UserLogin>';

.

Спустя 1 минута, 19 секунд (28.07.2011 - 15:07) ApuktaChehov написал(а):
Что я взял? Не понял.

Спустя 14 минут, 2 секунды (28.07.2011 - 15:21) pavel24071988 написал(а):
Цитата (ApuktaChehov @ 28.07.2011 - 09:03)
Прикрепил архив с тремя файлами. Как и у вас. В серверном скрипте сделал имитацию возврата xml, только в кодировке utf8.

И вы когда имитацию делали, то код получился:


<?php
header('Content-Type: text/xml; charset=UTF-8');
echo '<?xml version="1.0" encoding="UTF-16LE" standalone="no"?><UserLogin><row><username>stv</username><use rpass>stv</userpass><id_kontr>-1465089266963442925728172886.458368</id_kontr><n_kontr>Семёнкина Т.В.</n_kontr><category>3</category></row></UserLogin>';
?>


Я про эти utf-8 и utf-16le говорю, также заработало??????

Спустя 3 минуты, 8 секунд (28.07.2011 - 15:24) ApuktaChehov написал(а):
pavel24071988 - я файл с этим кодом перевел в кодировку utf8, редактором кода.

Одно дело в файле иметь текст, другое получать его откуда-нибудь еще.

Спустя 8 минут, 48 секунд (28.07.2011 - 15:33) ApuktaChehov написал(а):
вышлите мне, в архиве, ваши 3 файла, над которыми вы работаете. Я еще раз гляну.

Спустя 7 минут, 35 секунд (28.07.2011 - 15:40) pavel24071988 написал(а):
Спасибо что помогаете

но сожалению я не умею архивом

index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
meta name="author" content="MESMERiZE" />
<
meta http-equiv="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT" />
<
meta http-equiv="Pragma" content="no-cache" />
<
title>Ассинхронная форма</title>
</
head>
<
script src="jsxml.js" type="text/javascript">

</
script>
<
body>

Введите имя пользователя
<input type="text" id="login" value="" size="70" cols="40">
<
p>Введите пароль
<input type="password" id="password" value="">
</
p>
<
p><input value="Показать" onclick="show()" type="button" /></p>
<
span id="str1">Наш текст</span>
</
body>
</
html>


postxml.php

<?php
try
{
header('Content-Type: text/xml; charset=UTF-8');
$client = new SoapClient(Null, array('location' => "http://192.168.1.36:8080/ws_eorder/services/pk_wseorder_ws_framework", 'uri'=> "http://ws_eorder/" ));
$as_Return = $client->rc_userlogin($_POST['xmlstr']);
} catch (Exception $e) {
echo 'check the connecting to EAS!';
}
?>

jsxml.js

function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}

function show() {
var login = document.getElementById("login").value;
var password = document.getElementById("password").value;
var xmlhttp = getXmlHttp()
var xmlstr = '<?xml version="1.0" encoding="UTF-16LE" standalone="no"?><UserLogin> <row><username>'+ login +'</username><userpass>'+ password +'</userpass><id_kontr /> <n_kontr /> <category /> </row> </UserLogin>';
var url = "postxml.php";
xmlhttp.open('POST', url , true);
xmlhttp.setRequestHeader("Content-Type", "text/xml");

xmlhttp.onreadystatechange = function updatePage() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
var wer = xmlhttp.responseXML;
//var username = wer.documentElement.getElementsByTagName("username");
document.write(wer.getElementsByTagName('id_kontr')[0].childNodes[0].nodeValue);

}
}
}

xmlhttp.send(xmlstr);
}

[/php][/php]

Спустя 16 минут, 13 секунд (28.07.2011 - 15:56) ApuktaChehov написал(а):
Если архивом не можете прикрепите тогда вот так:

Спустя 20 минут, 11 секунд (28.07.2011 - 16:17) pavel24071988 написал(а):
Вот вроде прикрепил

Спустя 2 минуты, 50 секунд (28.07.2011 - 16:19) pavel24071988 написал(а):
Здесь все три

Спустя 49 минут, 1 секунда (28.07.2011 - 17:08) ApuktaChehov написал(а):
Так. Вот 3 файла. Оно все работает. Ваша задача изменить файл postxml, добавив туда нужный код, для работы с SOAP.

Если работать не будет, что нужно сделать:
1) Проверить валидность XML(тот пример, ответа сервера, что вы указывали в это теме, содержит ошибки в дереве XML)
2) После того, как вы удостоверитесь, что сервер возвращает ПРАВИЛЬНЫЙ XML документ, нужно попробовать еще раз скрипт. Если он НЕ заработал, попробовать изменить кодировку ответа.


Фактически в этом случае, у вас 2 варианта, которые могут вызвать проблемы:
1) Правильность XML
2) Кодировка ответа сервера.

Больше ничего трогать не надо!

Спустя 14 часов, 35 минут, 9 секунд (29.07.2011 - 07:44) pavel24071988 написал(а):
Вчера поменяли кодировку SOAP, получился вот такой ответ :
<?xml version="1.0" encoding="UTF-8" standalone="no"?><UserLog......

alert(xnlhttp.responseXML) выдает ответ "undefined"

Кодировка то правильная, но чё ему не хватает не пойму.....

Спустя 21 минута (29.07.2011 - 08:05) ApuktaChehov написал(а):
Вызовите из браузара(по ссылке) ваш серверный скрипт(postxml.php), и покажите что он возвращает.

Спустя 20 минут, 2 секунды (29.07.2011 - 08:25) pavel24071988 написал(а):
Это при запросе к серверу

Спустя 1 минута, 51 секунда (29.07.2011 - 08:26) pavel24071988 написал(а):
Firebag выдает тоже самое на шаге обращения:
<br />
<b>
Notice</b>: Undefined index: xmlstr in <b>C:\Site\localhost\www\ajax\postxml.php</b> on line <b>5</b><br />
<?xml version
="1.0" encoding="UTF-8" standalone="no"?>

<message><row><errnumber></errnumber><errtitle>
ws_framework / rc_userLogin()</errtitle><errmessage>Введите пользователя и пароль для авторизации. Доступ в систему не разрешен.</errmessage><typemessage>error</typemessage></row></message>



В разделе XML firebag(a) выдается :

[css]Ошибка синтаксического анализа XML: лишние данные после элемента документа Адрес: moz-nullprincipal:{7dbc7b59-e3d6-4f84-9176-9b710b3a3b55} Строка 2, символ 1:

<b>Notice</b>: Undefined index: xmlstr in <b>C:\Site\localhost\www\ajax\postxml...
^

Спустя 3 минуты, 42 секунды (29.07.2011 - 08:30) ApuktaChehov написал(а):
И? Мысли есть?

Спустя 3 минуты, 24 секунды (29.07.2011 - 08:33) pavel24071988 написал(а):
Не может получить по посту строку в нормальном виде
Грешу на код
<?php
header('Content-Type: text/xml');

$client = new SoapClient(Null, array('location' => "http://192.168.1.36:8080/ws_eorder/services/pk_wseorder_ws_framework", 'uri'=> "http://ws_eorder/" ));
$as_Return = $client->rc_userlogin($_POST['xmlstr']);
echo $as_Return;
?>

Особенно на этот кусок :

$as_Return = $client->rc_userlogin($_POST['xmlstr']);

Спустя 3 минуты, 37 секунд (29.07.2011 - 08:37) pavel24071988 написал(а):
Может быть я как то неправильно передал эту xml строку
Т.к. скармливали коду
$as_Return = $client->rc_userlogin($_POST['xmlstr']);
заместо "($_POST['xmlstr'])" то что мы ему передаем - все работало

Спустя 1 минута, 18 секунд (29.07.2011 - 08:38) ApuktaChehov написал(а):
Так так. Давайте разберемся.

Вы же отправляете серверу документ XMl. А на сервере пытаетесь использовать переменные $_POST. Как же так?!

Спустя 2 минуты, 37 секунд (29.07.2011 - 08:41) ApuktaChehov написал(а):
И откуда вообще берется эта... $_POST['xmlstr']???

Я ее даже, в теле передаваемого XML не нашел.

И что в ней должно быть? Имя пользователя?

Спустя 34 минуты, 27 секунд (29.07.2011 - 09:15) pavel24071988 написал(а):
Не не не Она там есть (ну во всяком случае я так понимаю):
function show() {
var login = document.getElementById("login").value;
var password = document.getElementById("password").value;
var xmlhttp = getXmlHttp()
var xmlstr = '<UserLogin> <row><username>'+ login +'</username><userpass>'+ password +'</userpass><id_kontr /> <n_kontr /> <category /> </row> </UserLogin>';
var url = "postxml.php";
xmlhttp.open('POST', url , true);
//xmlhttp.setRequestHeader("Content-Type", "text/xml");
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.onreadystatechange = function updatePage() {
if (xmlhttp.readyState == 4) {
if(xmlhttp.status == 200) {
var wer = xmlhttp.responseXML;
alert(wer);
//var username = wer.documentElement.getElementsByTagName("username");
// document.write(wer.getElementsByTagName('id_kontr')[0].childNodes[0].nodeValue);


}
}
}

xmlhttp.send(xmlstr);



А на сервере я её пытаюсь ловить вот так :
($_POST['xmlstr']);
- но я так понял это не правильно, у меня есть два предположения - это
1)люди ловят XML строку по POST на сервере через какой-то input (как то так я понял)
2)$HTTP_RAW_POST_DATA - что-то тоже не понятное[i][b]

Спустя 3 минуты, 28 секунд (29.07.2011 - 09:19) ApuktaChehov написал(а):
А что же вы матчасть не учите прежде чем работу делаете? Если что-то не знаете, берете мануал и смотрите как это делается. Вообще, то что мы тут уже второй день разбираем можно было за 15 минут сделать.

Я сейчас все поправлю и вышлю вам файлы.

Спустя 4 минуты, 52 секунды (29.07.2011 - 09:24) pavel24071988 написал(а):
Спасибо Вам огромное.
Да я учу мат часть, только не успеваю не до чего добираться wacko.gif

Спустя 19 минут, 1 секунда (29.07.2011 - 09:43) ApuktaChehov написал(а):
Попробуйте.

Спустя 14 минут, 56 секунд (29.07.2011 - 09:58) pavel24071988 написал(а):
Работает Спасибо laugh.gif laugh.gif laugh.gif

Спустя 1 минута, 41 секунда (29.07.2011 - 09:59) pavel24071988 написал(а):
Пошел мат часть читать, да и вообще теперь много работы, с полученным списком - рассортировать, сортировать, выбирать строки - думаю с этим таких проблем не возникнет.

Спасибо ещё раз
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.