"Chciałem napisać skrypt, który będzie potrafił wysłać fragment DOM mojej strony + jakieś inne informacje, np. obrazek. Podobno jest możliwość przerobienia obrazka na text. Podobna, bo u nie nie chce działać (obiekt FileReader).
W każdym razie mam problem ze sformułowaniem wiadomości do wysłania. W moim http request mają być dwie sekcje: application/x-www-form-urlencoded i application/octet-stream.
Kod funkcji, która to obsługuje wygląda tak:
function sendPage() {
var source = document.getElementById("pageContainer")
var serializer = new XMLSerializer
if(!source.hasChildNodes()) {
alert("nie ma nic do wysłania")
return
}
var DOMNodeInString = "content="+escape(serializer.serializeToString(source))
// sendToServer("savePage.php", true, handleAndShow, DOMNodeInString);return
xhttp.open("POST", "savePage.php", true)
var boundary = "xxx"
var body = "--"+boundary+"\r\n"
var file = document.getElementById("imgSource").files[0]
//wysyłam obrazek
if(file) {
var reader = new FileReader()
reader.readAsBinaryString(file)
body += "Content-Disposition: form-data; name='upload'; filename='"+file.name+"'\r\n"
body += "Content-Type: application/octet-stream\r\n\r\n"
body += reader.result+"\r\n"
body += "--"+boundary+"\r\n"
}
//wysyłam pozostałe pola formularza
body += "Content-Type: multipart/x-www-form-urlencoded \r\n\r\n"
body += DOMNodeInString
body += "\r\n--"+boundary+"--"
xhttp.setRequestHeader("Content-Type", "multipart/mixed; boundary="+boundary)
xhttp.onreadystatechange = handleAndShow
alert(body)
xhttp.send(body)
}
po stronie php:
<?
header('Content-type: text/plain');
$output = DOMImplementation::createDocument(null, "root", DOMImplementation::createDocumentType("root", "", ""));
$output->encoding = 'UTF-8';
echo $_POST["content"];
?>
Przykładowe body mojego http request:
--xxx
Content-Disposition: form-data; name='upload'; filename='Wikipedia-logo-v2-en.png'
Content-Type: application/octet-stream
--xxx
Content-Type: multipart/x-www-form-urlencoded
content=%3Cdiv%20id%3D%22pageContainer%22%20class%3D%22%22%3E%0A%20%20%3Cp%3Easdf%3C/p%3E%3C/div%3E
--xxx--
Niestety nie mogę odczytać $_POST["content"] - po prostu nic tam nie ma.
BTW. to co jest w content to zamieniony na string DOM Node przez XMLSerializer
Powiedzcie mi, co jest nie tak z moim zapytaniem? (a tak przy okazji, gdy FileReader nie chce działać to inaczej załadować img można tylko przez iframe?)"