|
|
|
| День добрый. У меня проблема такая:
есть форма в ней юзер нажимает кнопку и данные через POST передаются скрипту.
Дак вот в чем проблема как сделать чтобы отправлялись только данные из формы и скрипт выполнялся себе потихоньку, без перехода юзера. То есть он остается на странице с формой.
Заранее спасибо. | |
|
|
|
|
|
|
|
для: realkasper
(20.12.2006 в 11:52)
| | Ну решений несколько, можешь посмотреть тут по поиску, это уже есть в готовом виде на форуме.
Первое решение - использовать чистый AJAX с XMLHTTP.
Второе - переделанный AJAX под PHP фоновым запросом через яваскрипт.
Третье - в форме поставить после action target="_blank" onsubmit="window.focus()" тогда передача откроется в новом окне а фокус вернется в текущее окно, после окончания обработки данных в приемном скрипте нужно закрыть яваскриптом окно window.close(). | |
|
|
|
|
|
|
|
для: XPraptor
(20.12.2006 в 12:07)
| | Большое спасибо) сейчас попробую | |
|
|
|
|
|
|
|
для: realkasper
(20.12.2006 в 12:59)
| | на яве попробовал, не совсем то. Дело в том что скрипт выполняется долго, даже очень и закрывание окна не срабатывает. Нужно что то такое что вообще его открывать в браузере не будет. Возможно ли такое?? | |
|
|
|
|
|
|
|
для: realkasper
(20.12.2006 в 14:04)
| | Окно закрыть не в окне из которого вызвал, а в окне в котором происходит работа по обработке POST данных. Пока она не закончится окно не закроется. Но, ты можешь выскочить из лимита времени отведенного на работу скрипта. Тогда вся твоя обработка закончится ошибкой.
window.close() ты пишешь в событие тэга body <body onload="window.close()">. | |
|
|
|
|
|
|
|
для: XPraptor
(20.12.2006 в 14:39)
| | лимит времени значения не имеет) мне просто нужно чтобы скрипт получил данные и обрабатывал их без участия пользователя. А окно не закрывается пока он работает | |
|
|
|
|
|
|
|
для: realkasper
(20.12.2006 в 18:10)
| | Оно и не может закрыться пока работает скрипт. Чтобы вообще без окон нужно тогда любой из первых двух предложенных мною вариантов. Но их гораздо труднее реализовать. | |
|
|
|
|
|
|
|
для: XPraptor
(21.12.2006 в 05:12)
| | Ну а как это сделать то)))) я по форуму поискал но ничего не нашел по моему вопросу. Если не затруднит Вас то дайте пожалуйста ссылку | |
|
|
|
|
|
|
|
для: realkasper
(21.12.2006 в 19:21)
| | Ну сделай форму и скрипт обработчик в одном файле..и вроде всё | |
|
|
|
|
|
|
|
для: Alph[p]a
(21.12.2006 в 19:47)
| | Тема называется PHP и JS функции тут http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=27790&page=1
Я там дал человеку пример как делать фоновые запросы. Если не разберешся по тому прмеру, то не беспокой меня вопросами, пока осваивай третий метод. | |
|
|
|
|
|
|
|
для: XPraptor
(22.12.2006 в 02:16)
| | Третий метод исключен, потому что скрипт выполняется очень долго, до 20 минут. и естесственно никто не дождется окончания его работы. Нужно чтобы данные из формы передались скрипту POSTом и скрипт бы себе работал тихонько
А в том примере не очень все понятно ( прошу простить за неопытность)
у меня форма с текстовым полем и кнопка (отправить) | |
|
|
|
|
|
|
|
для: realkasper
(26.12.2006 в 16:20)
| | На аяксе такой скрипт пишется легко и быстро. | |
|
|
|
|
|
|
|
для: coloboc66
(26.12.2006 в 17:20)
| | Если Вас не затруднит подскажите пожалуйста)) | |
|
|
|
|
|
|
|
для: realkasper
(27.12.2006 в 14:58)
| | Простейший пример везде валяется
Java'вский скрипт:
var req;
function loadXMLDoc(url) {
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send(null);
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange;
req.open("GET", url, true);
req.send();
}
}
}
function processReqChange() {
document.form1.state.value = stat(req.readyState);
ab = window.setTimeout("req.abort();", 5000);
if (req.readyState == 4) {
clearTimeout(ab);
document.form1.statusnum.value = req.status;
document.form1.status.value = req.statusText;
// only if "OK"
if (req.status == 200) {
document.form1.response.value=req.responseText;
} else {
alert("Не удалось получить данные:\n" + req.statusText);
}
}
}
function stat(n)
{
switch (n) {
case 0:
return "не инициализирован";
break;
case 1:
return "загрузка...";
break;
case 2:
return "загружено";
break;
case 3:
return "в процессе...";
break;
case 4:
return "готово";
break;
default:
return "неизвестное состояние";
}
}
function requestdata(params)
{
loadXMLDoc('examples/httpreq.php'+params);
}
|
А это обработчик:
<?php
header("Content-type: text/plain; charset=windows-1251");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
echo "Хелло ворлд!\n\n";
if (isset($a))
{
for ($i=1; $i < 10000; $i++)
{
echo 'Это тестовая строка. ';
if (($i % 1000) == 0) flush();
}
}
if (count($_GET) > 0)
{
echo "\n\nПередано GET'ом\n"; print_r($_GET);
}
?>
|
Форма:
<form name=form1>
<table width=100% style="font-size: 100%">
<tr><td width=30% valign=top>
Состояние запроса
<td width=70%>
<input size=25 disabled type=text name=state value="">
<tr><td valign=top>Код статуса
<td><input disabled size=2 type=text name=statusnum value="">
<input disabled size=19 type=text name=status value="">
<tr><td valign=top>Данные от сервера
<td><textarea rows=6 name=response></textarea>
<tr><td>Строка GET-запроса<td>
<input type=text name=getparams value="?">
<input type=button onclick="requestdata(getparams.value);" value="GET">
</table>
</form>
|
А тут все подробно:)
http://mysitez.km.ua/Programming/?jshttpsend | |
|
|
|
|
|
|
|
для: malish
(27.12.2006 в 15:24)
| | Огромное Вам спасибо! Работает чудо как))) Но еще один вопросик))) как сделать чтобы после отправки запроса строка в форме где запрос обнулялась? | |
|
|
|