function SendFile(file) {
var reqVars = {title: 'some title', text: 'some text'};
var xhr = CreateXHRequest();
xhr.onreadystatechange = function () {
if (this.readyState == 4 && (this.status == 200 || this.status == 304 /*not modified*/)) {
if (this.responseText ... ) {
...
}
}
}
var boundary = '--KgQ4f5az';
var EOLN = "\r\n";
var postVars = '';
for (var name in reqVars) {
postVars += boundary + EOLN +
'Content-Disposition: form-data; name="' + name + '"' + EOLN +
EOLN + reqVars[name] + EOLN;
}
var data = boundary + EOLN +
'Content-Disposition: form-data; name="upload";' +
' filename="' + file.name + '"' + EOLN +
'Content-Type: application/octet-stream' + EOLN +
'Content-Transfer-Encoding: binary' + EOLN +
EOLN +
file.getAsBinary() + EOLN +
postVars +
boundary + '--';
xhr.open('POST', 'http://...');
xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary.substr(2));
xhr.setRequestHeader('Content-Length', data.length);
xhr.sendAsBinary(data);
}
как сделать post вручную?
Цитата:
Content-Type: multipart/form-data; boundary=---------------------------6713325791672799103612720006 Content-Length: 699 -----------------------------6713325791672799103612720006 Content-Disposition: form-data; name="comment_text" ляляля жужужу -----------------------------6713325791672799103612720006 Content-Disposition: form-data; name="topic_id" 2505 -----------------------------6713325791672799103612720006 Content-Disposition: form-data; name="parent_id" 27810 -----------------------------6713325791672799103612720006 Content-Disposition: form-data; name="save_breaks" ok -----------------------------6713325791672799103612720006 Content-Disposition: form-data; name="form_token" d635580c5c64670b55504f39c1a81171 -----------------------------6713325791672799103612720006--
у меня выходит только так:
Цитата:
Content-Type: application/x-www-form-urlencoded Content-Length: 82 topic_id=2505&parent_id=27809&comment_text=%26%231087%3B%26%231099%3B%26%231097%3B
(данные взяты из файрбага)
Что вам мешает использовать AJAX???
Отправка файла будет работать только в Firefox 3.6+, если файл цеплять не надо, то в любом браузере.
Код:
Прогел, было бы не лишним чтобы ты дал комментирии к своему коду, или хотя бы включил функцию CreateXHRequest() в тело твоего кода, а-то человек будет мучаться, что он не работает.
Код:
function CreateXHRequest() {
var request;
try {
request = new XMLHttpRequest();
} catch (e) {
var activex = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP");
for (var i = 0; i < activex.length && !request; i++) {
try {
request = new ActiveXObject(activex);
} catch (e) {}
}
}
return request ? request : null;
}
var request;
try {
request = new XMLHttpRequest();
} catch (e) {
var activex = new Array("MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.5.0",
"MSXML2.XMLHTTP.4.0",
"MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP",
"Microsoft.XMLHTTP");
for (var i = 0; i < activex.length && !request; i++) {
try {
request = new ActiveXObject(activex);
} catch (e) {}
}
}
return request ? request : null;
}
SendFile() принимает объект File (правда, как уже сказал, отправка из него будет работать только в FF 3.6+, т.к. у других пока нет file API) и передаёт его как бинарник. Другие переменные (POST) можно задать в reqVars в форме [COLOR="Blue"]{имяПеременной: значение, ...}[/COLOR].
Запрос отправляется как multipart/form-data, если файл передавать не надо, то лучше изменить это на form-www-urlencoded, но тогда придётся менять формат данных.
Кстати, есть подозрение, что автор хочет делать запрос к другому хосту - не надо забывать, что на JS это не прокатит и нужно использовать какое-то зеркало на сервере (код легко портануть на PHP, что кстати я тоже делал).