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

Ваш аккаунт

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

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

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

Формирование POST запрпоса c JavaScript

2.8K
23 июля 2006 года
Unglued
119 / / 15.09.2005
Не могу понять как правильно сформировать.

Допустим я хочу передать следующий заголовок:

Content-Type: multipart/form-data; boundary=1BEF0A57BE110FD467A\r\n
Content-Length: 2000\r\n\r\n
--1BEF0A57BE110FD467A\r\n
Content-Disposition: form-data; name="news_file"; filename="news.txt"\r\n
Content-Type: application/octet-stream\r\n
Content-Transfer-Encoding: binary\r\n\r\n
nuploadfile\r\n
--1BEF0A57BE110FD467A--\r\n

В JavaScript делаю следующее:

xmlhttp.open("POST", "http://www.dubmon.com/ed/upload/example_upload.php", false);
xmlhttp.setRequestHeader("Content-Type", "multipart/form-data; boundary=1BEF0A57BE110FD467A");
xmlhttp.setRequestHeader("Content-Length", "2000");*/
xmlhttp.setRequestHeader("--1BEF0A57BE110FD467A\r\nContent-Disposition", "form-data; name='news_file'; filename='news.txt'\r\n");
xmlhttp.setRequestHeader("Content-Type", "application/octet-stream\r\n");
xmlhttp.setRequestHeader("Content-Transfer-Encoding", "binary\r\n\r\nuploadfile\r\n--1BEF0A57BE110FD467A--\r\n");
xmlhttp.send(formData);

Правильно ли я делаю, ибо не работает.
12
25 июля 2006 года
alekciy
3.0K / / 13.12.2005
Хм... объект XMLHTTP это объект ActiveX который работает только для IE. Все остальные браузеры юзают XMLHttpRequest.
Если что-то не работает, нужно начать разбор скрипт с самого начала на каждом шаге убеждаясь, что в предыдушем были созданы все объекты и их свойства приняли нужные значения.
Поэтому для начало стоило бы убедиться, что объект XMLHttpRequest/XMLHTTP у тебя создается.
К примеру таким скриптом:
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>AJAX</title>
<script type="text/javascript" language="javascript">
function httpRequest() {
    if (window.XMLHttpRequest) {
        request = new XMLHttpRequest();
        alert("Используется XMLHttpRequest объект");
    } else if (window.ActiveXObject) {
        request=new ActiveXObject("Msxml2.XMLHTTP");
        alert("Используется XMLHTTP объект dthcbb 2");
        if (!request) {
            request=new ActiveXObject("Microsoft.XMLHTTP");
            alert("Используется XMLHTTP объект dthcbb 1");
        };
    } else {
        alert("Объект  XMLHttpRequest/XMLHTTP создан не был");
    };
};
</script>
</head>
<body &#111;&#110;load="httpRequest()">
</body>
</html>

Теперь у нас есть объект request с которым и нужно работать. Он уже не зависит от браузера на клиенте. А твой же код с xmlhttp будет понятен ТОЛЬКО IE. Нужно создавать кросс-браузерные приложения которые будут одинаково работать в любом браузере.
2.8K
26 июля 2006 года
Unglued
119 / / 15.09.2005
оффтоп

Допустим я разобрался уже с чисто своим вопросом.

Возник другой: http://forum.codenet.ru/showthread.php?t=28008
12
26 июля 2006 года
alekciy
3.0K / / 13.12.2005
А я там отписал уже ведь. Для того, что бы сделать upload файлов на сервер ни какие танцы с бубном не нужны.
2.8K
27 июля 2006 года
Unglued
119 / / 15.09.2005
Отлично. А теперь попробуй реализовать на JS аплоад файла на сервер.
Кода получится, обязательно напиши, сколько всетаки кругов с бубном ты отпрыгал %)

var len = krugov.buben
if(len < 50) window.writeln("Молодец!");
else window.writeln("Для того-то этот пост тут и висит.");

Вперёд.
15
27 июля 2006 года
shaelf
2.7K / / 04.05.2005
При чём тут JavaScript и upload. JavaScript это клиенткский язык, upload - это работа форм. Я не понимаю в чём тут проблемы. Делаешь поле input type="file" и отправляешь. А если ты хочешь схватить файл без ведома пользователя, тогда сходи сначало на w3c и почитай свойство сего типа (file), а затем погугли на тему "Безопастность в JavaScript".
12
27 июля 2006 года
alekciy
3.0K / / 13.12.2005
[QUOTE=Unglued]Отлично. А теперь попробуй реализовать на JS аплоад файла на сервер.
[/QUOTE]
И зачем?! Upload делается через форму. Как описано в HTML специфакации и JavaScript тут соверешнно не причем. Не стоит изобретать велосипед.
Так что полностью поддерживаю shaelf-а.

"Не умножайте сущностей сверх необходимости" © Оккам. ;)
2.8K
28 июля 2006 года
Unglued
119 / / 15.09.2005
Цитата:
При чём тут JavaScript и upload. JavaScript это клиенткский язык, upload - это работа форм. Я не понимаю в чём тут проблемы. Делаешь поле input type="file" и отправляешь. А если ты хочешь схватить файл без ведома пользователя, тогда сходи сначало на w3c и почитай свойство сего типа (file), а затем погугли на тему "Безопастность в JavaScript".



Ок. Упрощу вопрос.

Как все знают форма с input type="file при нажатии на "Submit" отправляет серверному скрипту POST-запрос. Все что я хочу - создать функцию, которая сформирует и отправит точно такой же POST запрос. Грубо говоря, я хочу заного изобрести велосипед и усложнить простое, но поверьте, мне это необходимо.

Я точно знаю что XMLHTTPRequest на это способен. Остается только найти человека, который знает, как решить мою проблему.

12
28 июля 2006 года
alekciy
3.0K / / 13.12.2005
Unglued
Цитата:
Я точно знаю что XMLHTTPRequest на это способен.


Если уверен, то в чем проблемы? Если не знаешь, то не утверждай, того, что не знаешь ;)

Во-вторых. Как скприпт узнает, какой файл нужно перадавать? Ему пользователь указывает. Но как?

Цитата:
Все что я хочу - создать функцию, которая сформирует и отправит точно такой же POST запрос. Грубо говоря, я хочу заного изобрести велосипед и усложнить простое, но поверьте, мне это необходимо.


Даже изобретение велосипеда заново должно быть обоснованным. Опиши ситуацию, для ЧЕГО и КОГДА нужен подобный скрипт.

15
30 июля 2006 года
shaelf
2.7K / / 04.05.2005
2Unglued Если уверен, то ставь снифер, лови пакеты, вытаскивай информацию, смотри как выглядит и передавай тоже самое...
2.8K
30 июля 2006 года
Unglued
119 / / 15.09.2005
Охренеть, дайте два!

[SIZE="3"]Следующий!!![/SIZE]
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Доброе время суток.
Столкнулся с подобной проблемой и так и не смог найти в ответа.

Есть UserControl, на нём лежит FileUpload. Как с помощью javaScript
отправить POST запрос на специальную страничку FileUploader.aspx и
передать через контекст контрол FileUpload (или файл из него) ?

Суть в том, что есть страничка (ASP.NET, C#), на ней есть панель с
ЮзерКонтролом, которая при помощи ModalPopupExtension выводится
на экран. В Юзер контроле есть FileUpload и мне надо загружать картинки на сервер без перегрузки страницы (FileUpload отправляет данные на сервер только при полном постбэке).
92
05 ноября 2009 года
Тень Пса
2.2K / / 19.10.2006
постить форму в скрытый iframe, например и после этого скрывать или обнулять форму снова. обсуждалось уже где-то на форуме.
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Да, это я сделал. У меня есть <div>, я в InnerHtml создаю <iframe>,
но я не знаю как запостить туда контрол FileUpload (или файл из него)
Я могу методом GET передать в страничку из <iframe> строковае значения, а вот как файл передать я не знаю :(
536
05 ноября 2009 года
alex-kniaz
382 / / 07.08.2008
<form target="ifrma001">
<input type="file" name="fileSet" />
<input type="button" value="GO" />
</form>
<iframe name="iframe001" style="display:none;"></iframe>
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Боюсь ошибиться, но помоему ASP.NET не поддерживает более одной формы?
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Ага, не более одной формы с runat="server"..
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Когда я в ЮзерКонтрол вставляю <form ...></form> у меня перестаёт отображатся контрол на экране.

Я снова боюсь ошибиться, но помоему вложенные формы не работают?
13
05 ноября 2009 года
RussianSpy
3.0K / / 04.07.2006
Что значит "вложенные формы"?
325
05 ноября 2009 года
Franky
723 / / 10.08.2005
к вопросу о submit для файла: а что мешает поставить вместо нее обычный button и обрабатывать форму через JS по onclick? Или я чего-то не понимаю?
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Ну у меня есть МастерПэйдж. на ней лежит <form>
внутри этой формы - разные плэйсХолдеры, в которых я и вывожу свои
странички.
Получается, что если я в ЮзерКонтроле, который лежит на одной из
страниц пропишу ещё один тэг <form /> - то получится
вложенные формы
13
05 ноября 2009 года
RussianSpy
3.0K / / 04.07.2006
Нет не получится
эти теги будут на разных HTML-страницах следовательно ни о каком вложении нет речи.

Очень тяжело понимать что вы имеете ввиду поскольку вы используете для объяснения проблем с Web термины прикладного системного программирования
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Цитата: Franky
к вопросу о submit для файла: а что мешает поставить вместо нее обычный button и обрабатывать форму через JS по onclick? Или я чего-то не понимаю?



для того что бы обработать файл - нужен полный постБэк на сервер.
А мне нельзя перегружать страницу целиком.
Обойти это можно спомощью скрытого iframe и постить на другую страницу. Как это сделать без <form> я не могу найти

13
05 ноября 2009 года
RussianSpy
3.0K / / 04.07.2006
Можно взять готовый фреймворк (например тот же jQuery) и отправить данные по POST используя встроенные во фреймворк AJAX методы.
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Цитата: RussianSpy
Можно взять готовый фреймворк (например тот же jQuery) и отправить данные по POST используя встроенные во фреймворк AJAX методы.



Так получилось, что в нашем проекте не используется jQuery, да и я с ним не знаком. Хотелось бы узнать - есть ли способ решить эту проблему
без посторонней либы, так как по сути она нужна только в этом моменте... И если всё же стОит делать через jQuery, то можно ли у вас попросить пару ключевых слов, что бы нагуглить нужное мне решение -
сам рыская по этой либе я потрачу много времени на поиск

53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
а JavaScript я могу сделать такую штуку:

function someFunc()
{
var req = getRequest(); // = new XMLHttpRequest(), например.
if (req)
{
var params = "path=ff&name=dd";
req.open("POST", "../FileUploader.aspx", true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.send(params);
}
}

Я так понимаю, что эта js-функция отправит пост запрос в FileUploader.aspx (хотя не уверен что это рабочий код)

А можно таким же образом отправить файл?
92
05 ноября 2009 года
Тень Пса
2.2K / / 19.10.2006
нет, т.к. файл ты не получишь с помощью JS.
зачем тебе "вложенные формы"? это может означать только то, что у вас слегка неверно построено дерево элементов. Форма в форме выполнится не сможет... точнее, результат будет не верным.

стоит привести кусок HTML уже итоговой страницы. тогда можно будет разбираться.
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
Main.Master:

[HTML]
<%@ Master Language="C#" ...
<%@ Register TagPrefix="asp" ...
<head... />
<body>
<form runat="server ...>
<asp:ContentPlaceHolder ID="mainContentPlaceHolder" runat="server"/>
</form>
</body>
[/HTML]

Images.aspx:
[HTML]
<%@ Page Language="C#" MasterPageFile="~/Main.Master"...
<%@ Register TagPrefix="uc" TagName="myControl" Src="~/Controls/MyControl.ascx"%>

<asp:Content ContentPlaceHolderID="mainContentPlaceHolder" ...
<asp:Panel ...
<uc:myControl... />
</asp:Panel>
<ajaxToolkit:ModalPopupExtender .... бла-бла : выводим myControl как модальное окошко.
[/HTML]
MyControl.ascx:
[HTML]
<%@ Control Language="C#"
<input type="file" id="fileDialog" />
<asp:Button runat="server" Text="Upload" onClick="OnAddImageButtonClick" onClientClick="java script:sendImage();"/>
[/HTML]


и теперь в MyControl.ascx надо правильно написать js function sendImage()

типа:

Код:
<script type="text/javascript">
function sendImage()
{
            var req = getRequest();
            req.open("POST", "../FileUploader.aspx", true);
            req.setRequestHeader("Content-type", "multipart/form-data...);
            req.setRequestHeader("Connection", "close");
            req.setRequestHeader("Content-length", requestbody.length);
            req.send(params);
}
</script>
53K
05 ноября 2009 года
lorddump
12 / / 05.11.2009
вообщем, код js функции я кривой вставил, я с ним пока не разобрался,
я так понимаю, что мне надо что то типа :

http://www.captain.at/ajax-file-upload.php

здесь есть пример, но у меня он упал на
строке
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");

Если кто сможет подкорректировать мою js функцию - буду очень признателен
92
06 ноября 2009 года
Тень Пса
2.2K / / 19.10.2006
в ASP канеш не шарю... но должно получиться что-то вроде такого:
 
Код:
<form action="bla.aspx" id="uni_form">
<!-- тут вставлен контрол выбора файла картинки -->
<input type="file" name="image" />
<input type="submit" name="image_upload" value="Upload" &#111;&#110;click="return submitUploadForm();" />
<!-- /// -->
</form>
<iframe name="uploader" style="display: none;" />


дык вот... когда ты жмакаешь на кнопку Upload, советую сделать следующее:
Код:
function submitUploadForm()
{
  el = document.getElementById('uni_form');
  if (el) {
    el.target="uploader";
    //el.action = "твой_скрипт_для_аплоада.php"; // например
    // тут что хочешь делаешь, скрываешь форму и пр. фишки визуальные )
    return true;
  } else {
    // ошибка, форма не найдена O_o
    return false;
  }
}


в скрипте, который получит твой image, проверяешь, если переменная image_upload != пустой строке, то дальше читаешь переменную с файлом (image), пишешь куда надо и прочее.

т.е. получается никаких вложенных форм, никаких излишеств. У тебя есть одна форма, таргет и экшн которой подменяется c помощью JS для разных нужд. Если я правильно тебя понял, то в этой форме могут быть не только image upload секции.

PS: надеюсь получилось объяснить )
53K
06 ноября 2009 года
lorddump
12 / / 05.11.2009
Вот в том то у меня и заковырка, что не могу я <form> использовать,
так как это всё у меня в ЮзерКонтроле происходит =\
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог