Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как сделать post вручную?

56K
24 августа 2010 года
pika.chu
13 / / 19.07.2010
добрый день. как сформировать жабаскриптом такой пост-запрос:
Цитата:
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



(данные взяты из файрбага)

369
24 августа 2010 года
Kesano
451 / / 09.10.2007
Что вам мешает использовать AJAX???
http://www.xmlhttprequest.ru
ну или jQuery на худой конец...
253
24 августа 2010 года
Proger_XP
1.5K / / 07.08.2004
Раз уж кода не показали, то приведу свой, который я использовал. Переделай его для себя.
Отправка файла будет работать только в Firefox 3.6+, если файл цеплять не надо, то в любом браузере.

Код:
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);
}
369
24 августа 2010 года
Kesano
451 / / 09.10.2007
Прогел, было бы не лишним чтобы ты дал комментирии к своему коду, или хотя бы включил функцию CreateXHRequest() в тело твоего кода, а-то человек будет мучаться, что он не работает.
253
24 августа 2010 года
Proger_XP
1.5K / / 07.08.2004
Лишние мучения автору не помешают - он даже не заметил, что вывод в [cоde] у него сьехал. Да и по стилю вопросов видно. Но раз коллектив за...

Код:
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;
}


SendFile() принимает объект File (правда, как уже сказал, отправка из него будет работать только в FF 3.6+, т.к. у других пока нет file API) и передаёт его как бинарник. Другие переменные (POST) можно задать в reqVars в форме [COLOR="Blue"]{имяПеременной: значение, ...}[/COLOR].

Запрос отправляется как multipart/form-data, если файл передавать не надо, то лучше изменить это на form-www-urlencoded, но тогда придётся менять формат данных.

Кстати, есть подозрение, что автор хочет делать запрос к другому хосту - не надо забывать, что на JS это не прокатит и нужно использовать какое-то зеркало на сервере (код легко портануть на PHP, что кстати я тоже делал).
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог