Microsoft.XMLHTTP и получение пхп скриптом контента

clevel

Новичок
Microsoft.XMLHTTP и получение пхп скриптом контента

в java-script выполняю такие строки:
this.httpObj = new ActiveXObject("Microsoft.XMLHTTP");
this.action = "Save";
this.httpObj.Open("POST", index.php, true, "", "");
this.httpObj.setRequestHeader("Content-Type","text/xml");
this.httpObj.Send('мои данные');
тем самым посылается моему скрипту данные.
Да, забыл сказать, дпередаваемые данные мне хотелось бы передавать текстовые (значения формы), неохоты сначало клиентским скриптом формировать xml и отправлять после этого.. там только одна форма с данными, думается лишним еще и конвертировать из html в xml.
Вопрос: как эти данные получить пхп скриптом?
как называется переменная, куда приходят данные, как ее оттуда забрать?
я в xml новичек, прошу помочь, направить, так сказать, на путь истинный...
 

slach

Новичок
кстати... XMLHTTP насколько я понимаю ОБЯЗАН посылать на сервер well-formed XML документ...
 

clevel

Новичок
заголовки мне не понадобились.. а вот с fopen('php://stdin'); проблемы. Пишу код:
$fd=fopen('php://stdin','r');
while (!feof($fd))
$cnt.=fgets($fd,4096);
fclose($fd);
записываю содержание в файл:
$fp=fopen($dir."/panel/tmp","w");
fputs($fp,$cnt);
fclose($fp);
Начинаю выполнять код, идут жуткие тормоза на комп, файл не создается темповый...
комментирую код получения контента, все летает, содается пустой файл...
убираю цикл получения контента, только одну строку получаю - возвращает пустую строку...
в javascripts упростил до:
var cnt = new ActiveXObject("Msxml2.XMLHTTP");
cnt.Open("POST", index.ph, false, null, null);
cnt.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
cnt.Send("3333333");
не помогает.
В чем может быть проблема?
 

Андрей М.

Guest
slash, не обязан, не обязан и возвращать:) есть же помимо responseXML еще responseText

По сабжу:
яваскрипт:
Код:
<script>
var zapros="строка";
var externalDoc = new ActiveXObject("Msxml2.XMLHTTP");
externalDoc.open('POST', 'http://domain.com/test.php',false);
externalDoc.send(zapros);
alert(externalDoc.responseText);
</script>
пхп:
Код:
<?php
print $HTTP_RAW_POST_DATA
?>
:)
 

clevel

Новичок
еще проблема - при передаче в скрипт данных, содержащих русские символы, происходит их "превращение в иероглифы".
Пытался писать:
cnt.setRequestHeader("Content-Type","Text/html");
cnt.setRequestHeader("charset","windows-1251");
то же самое, но с encoding, не помогает...
в чем могут быть грабли?
 

Андрей М.

Guest
я с такой проблемой не сталкивался, но вот это должно помочь (на моем примере):
var zapros=escape("строка") ;
....
alert(unescape(externalDoc.responseText));
 

clevel

Новичок
Проблема не с выводом ответа, а с отправляемым текстом, то что отправляется фуекцией externalDoc.send(zapros);
если я escape добавляю перед отправкой контента (html страничка), то в пхп urldecode конвертит все латинские символы нормально, а русские символы идут закодированные вида %u041E.
Вижу два пути: все-таки на клиенте решить проблему(даже не знаю как);
второе - прекодировка на сервере(тогда как именно? стандартных функций перекодирования из Unicode в windows-1251 я не нашел в мане).
 

slach

Новичок
хмм... innerHTML должен отдавать содержимое не в UTF-8 а в родной кодировке документов
смотри какие заголовки отдаются сервером при формировании документа...

а вообще сформировал бы ты нормальный XML документ
и распарсил его в DOMXML

плюс поищи какую нибудь опцию в XMLHTTP которая отключает перекодировку на лету...
 

clevel

Новичок
clevel, плохо искал: iconv()
подключаемая библиотека, что не есть хорошо - я же у прова хостюсь, могет и не быть..
сейчас вышел так из положения:
PHP:
             $arr1=array("/\%u0419/","/\%u0426/","/\%u0423/","/\%u041A/","/\%u0415/","/\%u041D/","/\%u0413/","/\%u0428/","/\%u0429/","/\%u0417/","/\%u0425/","/\%u042A/","/\%u042D/","/\%u0416/","/\%u0414/","/\%u041B/","/\%u041E/","/\%u0420/","/\%u041F/","/\%u0410/","/\%u0412/","/\%u042B/","/\%u0424/","/\%u042F/","/\%u0427/","/\%u0421/","/\%u041C/","/\%u0418/","/\%u0422/","/\%u042C/","/\%u0411/","/\%u042E/","/\%u0439/","/\%u0446/","/\%u0443/","/\%u043A/","/\%u0435/","/\%u043D/","/\%u0433/","/\%u0448/","/\%u0449/","/\%u0437/","/\%u0445/","/\%u044A/","/\%u044D/","/\%u0436/","/\%u0434/","/\%u043B/","/\%u043E/","/\%u0440/","/\%u043F/","/\%u0430/","/\%u0432/","/\%u044B/","/\%u0444/","/\%u044F/","/\%u0447/","/\%u0441/","/\%u043C/","/\%u0438/","/\%u0442/","/\%u044C/","/\%u0431/","/\%u044E/");
             $arr2=array("Й","Ц","У","К","Е","Н","Г","Ш","Щ","З","Х","Ъ","Э","Ж","Д","Л","О","Р","П","А","В","Ы","Ф","Я","Ч","С","М","И","Т","Ь","Б","Ю","й","ц","у","к","е","н","г","ш","щ","з","х","ъ","э","ж","д","л","о","р","п","а","в","ы","ф","я","ч","с","м","и","т","ь","б","ю");
             $cnt=preg_replace($arr1,$arr2,$cnt);
но чувствую, что не самый лучший вариант по скорости..
 

clevel

Новичок
а вообще сформировал бы ты нормальный XML документ
и распарсил его в DOMXML
у меня html документ передается... я себе слабо представляю xml с одним тегом, в котором содержатся данные.
 

clevel

Новичок
юзаю следующую конструкцию, выдает ошибку:
var domObj = new ActiveXObject("Microsoft.XMLDOM");
domObj.CreateXmlDeclaration("1.0","windows-1251"); //ошибка здесь, пытался var _dop=domObj.CreateXmlDeclaration("1.0","windows-1251"); тоже само
domObj.documentElement = domObj.createElement("CLEVEL_ROOT")
var root = domObj.documentElement
var oNode;
oNode = domObj.createElement("CLEVEL_Original")
var oNodeOriginal = root.appendChild(oNode)

oNode = domObj.createElement("CONTENT");
oNodeOriginal.appendChild(oNode);
oNode.text=documentHTML;
возвращает также в иерогливах... помогите справиться с кодировокй! Два дня тр..сь...
 

Андрей М.

Guest
clevel, есть мнение что ты не там роешь. Последний твой пример, по-моему свидетельствует о том, что дело не в браузере. Значит в сервере. Смотри, может у тебя установлена дефолтная кодировка, или еще что.

P.S. Есть еще createCDATASection.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmmthcreatecdatasection.asp
 

clevel

Новичок
стоп! при получении данных, я для проверки их сохраняют в файл, как есть, без парсинга... так вот,... иероглифы уже здесь есть... что заставляет меня думать, что перекодировка все же на клиенте происходит...
читают мануал по xml... при отправки domObj.xml все должно приходить в utf-8... все другие кодировки перекодируются...
вот так...
поэтому и ищу выход... надо русские чтобы символы воспринимало, хоть ты тресни, не получается!
 
Сверху