У меня есть небольшое 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 на сервер, то биш
Для передачи в javascript я должен писать вот так????
Мне кажется что какую ту малость я упускаю, Просто действительно очень нужно решить эту задачу
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
Это что касается броузера
Сервер (Apach):
При вводе логина и пароля через responseText возвращается
Через responseXML возвращается
Что же тут не правильно ????????????
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 это объект, что он вам и пишет.
DOM это объект, что он вам и пишет.
Спустя 9 минут, 24 секунды (28.07.2011 - 11:11) pavel24071988 написал(а):
В дебагаре на шаге после шага var wer = xmlhttp.responseXML;
Все значения пустые childNode {...}, ..., xml{...} да и вообще он пишет что значение переменной wer есть {...} Зато тип указывает IXMLDOMDocument2 ???
Так и должно быть, я совсем запутался - значения же пустые, чего я буду парсить?
Все значения пустые childNode {...}, ..., xml{...} да и вообще он пишет что значение переменной wer есть {...} Зато тип указывает IXMLDOMDocument2 ???
Так и должно быть, я совсем запутался - значения же пустые, чего я буду парсить?
Спустя 10 минут, 28 секунд (28.07.2011 - 11:21) pavel24071988 написал(а):
Да и еще при вот таком вот маневре
Ничего не происходит а броузер сообщает что
:unsure:
var username = wer.documentElement.getElementsByTagName("username");
alert(username);
Ничего не происходит а броузер сообщает что
document.Element - есть null или не является атрибутом.
:unsure:
Спустя 4 секунды (28.07.2011 - 11:21) ApuktaChehov написал(а):
если responseText, возвращает тело XML в виде строки, то он не может быть пустым, ведь сервер присылает одно и тоже, только с разными заголовками.
Если вы пользуетесь firefox, то там есть отличный фаербаг. В нем можно посмотреть, что вернул сервер, в том числе и в формате XML.
Можно попробовать и так посмотреть:
object это объект, которые вернул сервер через аякс
Если вы пользуетесь 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 это вот:
Дебагер IE выдает ошибку:
Объект не поддерживает это свойство или метод
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>
Отправляете на сервер или принимаете с сервера?!
Вы вот это:
<?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, методом
Если через responseXML то document.write возвращает [Object] и в html коде тоже находится [Object]
Если через 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
postxml.php
jsxml.js
Вот последний вариант кода
<!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
2) в какой кодировке вы отправляете данные клиенту?
3) в какой кодировке клиент ожидает данные?
И вообще, не нравится мне эта ваша UTF-16LE
Спустя 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
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.
Как-то так.
Если с имитацией все работает, и код у имитатора и от сервера одинаковы и отличаются только кодировками, то проблема именно в кодировках.
Честно говоря, я бы переписал севере, что бы он мне 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 не опознали скрипты и не исполнили его.
По этому однозначно, клиентские файлы, вас скрипт, которые принимает данные от soap должны быть в кодировке utf-8. А пришедшие данные надо перекодировать. И в заголовке XML и в заголовках браузеру указать utf8 в место вашей.
По этому однозначно, клиентские файлы, вас скрипт, которые принимает данные от soap должны быть в кодировке utf-8. А пришедшие данные надо перекодировать. И в заголовке XML и в заголовках браузеру указать utf8 в место вашей.
Спустя 3 минуты, 6 секунд (28.07.2011 - 12:55) pavel24071988 написал(а):
Спасибо большое.
Но если мне через Soap включать то код на сервере должен быть таким????:
Но если мне через 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 написал(а):
!!
Вы на сервере прописывали шапку :
Но в echo у Вас все равно написана строка с:
у меня же такаяже строка посредством Soap засовывается в переменую, после ччего я делаю :
Я не пойму чего не хватает для responseXML?????????
Поидее и перекодирововать ничего не нужно.......
:wacko: :wacko: :wacko: :wacko: :wacko: :wacko: :wacko: :blink: :blink: :blink: :wacko: :wacko: :wacko: :wacko:
Вы на сервере прописывали шапку :
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:
postxml.php
jsxml.js
но сожалению я не умею архивом
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
[/php][/php]
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);
}
Спустя 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) Кодировка ответа сервера.
Больше ничего трогать не надо!
Если работать не будет, что нужно сделать:
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"
Кодировка то правильная, но чё ему не хватает не пойму.....
<?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 выдает тоже самое на шаге обращения:
В разделе XML firebag(a) выдается :
<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. Как же так?!
Вы же отправляете серверу документ XMl. А на сервере пытаетесь использовать переменные $_POST. Как же так?!
Спустя 2 минуты, 37 секунд (29.07.2011 - 08:41) ApuktaChehov написал(а):
И откуда вообще берется эта... $_POST['xmlstr']???
Я ее даже, в теле передаваемого XML не нашел.
И что в ней должно быть? Имя пользователя?
Я ее даже, в теле передаваемого XML не нашел.
И что в ней должно быть? Имя пользователя?
Спустя 34 минуты, 27 секунд (29.07.2011 - 09:15) pavel24071988 написал(а):
Не не не Она там есть (ну во всяком случае я так понимаю):
А на сервере я её пытаюсь ловить вот так :
1)люди ловят XML строку по POST на сервере через какой-то input (как то так я понял)
2)$HTTP_RAW_POST_DATA - что-то тоже не понятное[i][b]
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 написал(а):
Спасибо Вам огромное.
Да я учу мат часть, только не успеваю не до чего добираться
Да я учу мат часть, только не успеваю не до чего добираться
Спустя 19 минут, 1 секунда (29.07.2011 - 09:43) ApuktaChehov написал(а):
Попробуйте.
Спустя 14 минут, 56 секунд (29.07.2011 - 09:58) pavel24071988 написал(а):
Работает Спасибо
Спустя 1 минута, 41 секунда (29.07.2011 - 09:59) pavel24071988 написал(а):
Пошел мат часть читать, да и вообще теперь много работы, с полученным списком - рассортировать, сортировать, выбирать строки - думаю с этим таких проблем не возникнет.
Спасибо ещё раз
Спасибо ещё раз