Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Паралельная работа скрипта
 
 автор: realkasper   (20.12.2006 в 11:52)   письмо автору
 
 

День добрый. У меня проблема такая:
есть форма в ней юзер нажимает кнопку и данные через POST передаются скрипту.
Дак вот в чем проблема как сделать чтобы отправлялись только данные из формы и скрипт выполнялся себе потихоньку, без перехода юзера. То есть он остается на странице с формой.
Заранее спасибо.

   
 
 автор: XPraptor   (20.12.2006 в 12:07)   письмо автору
 
   для: realkasper   (20.12.2006 в 11:52)
 

Ну решений несколько, можешь посмотреть тут по поиску, это уже есть в готовом виде на форуме.
Первое решение - использовать чистый AJAX с XMLHTTP.
Второе - переделанный AJAX под PHP фоновым запросом через яваскрипт.
Третье - в форме поставить после action target="_blank" onsubmit="window.focus()" тогда передача откроется в новом окне а фокус вернется в текущее окно, после окончания обработки данных в приемном скрипте нужно закрыть яваскриптом окно window.close().

   
 
 автор: realkasper   (20.12.2006 в 12:59)   письмо автору
 
   для: XPraptor   (20.12.2006 в 12:07)
 

Большое спасибо) сейчас попробую

   
 
 автор: realkasper   (20.12.2006 в 14:04)   письмо автору
 
   для: realkasper   (20.12.2006 в 12:59)
 

на яве попробовал, не совсем то. Дело в том что скрипт выполняется долго, даже очень и закрывание окна не срабатывает. Нужно что то такое что вообще его открывать в браузере не будет. Возможно ли такое??

   
 
 автор: XPraptor   (20.12.2006 в 14:39)   письмо автору
 
   для: realkasper   (20.12.2006 в 14:04)
 

Окно закрыть не в окне из которого вызвал, а в окне в котором происходит работа по обработке POST данных. Пока она не закончится окно не закроется. Но, ты можешь выскочить из лимита времени отведенного на работу скрипта. Тогда вся твоя обработка закончится ошибкой.
window.close() ты пишешь в событие тэга body <body onload="window.close()">.

   
 
 автор: realkasper   (20.12.2006 в 18:10)   письмо автору
 
   для: XPraptor   (20.12.2006 в 14:39)
 

лимит времени значения не имеет) мне просто нужно чтобы скрипт получил данные и обрабатывал их без участия пользователя. А окно не закрывается пока он работает

   
 
 автор: XPraptor   (21.12.2006 в 05:12)   письмо автору
 
   для: realkasper   (20.12.2006 в 18:10)
 

Оно и не может закрыться пока работает скрипт. Чтобы вообще без окон нужно тогда любой из первых двух предложенных мною вариантов. Но их гораздо труднее реализовать.

   
 
 автор: realkasper   (21.12.2006 в 19:21)   письмо автору
 
   для: XPraptor   (21.12.2006 в 05:12)
 

Ну а как это сделать то)))) я по форуму поискал но ничего не нашел по моему вопросу. Если не затруднит Вас то дайте пожалуйста ссылку

   
 
 автор: Alph[p]a   (21.12.2006 в 19:47)   письмо автору
 
   для: realkasper   (21.12.2006 в 19:21)
 

Ну сделай форму и скрипт обработчик в одном файле..и вроде всё

   
 
 автор: XPraptor   (22.12.2006 в 02:16)   письмо автору
 
   для: 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

Я там дал человеку пример как делать фоновые запросы. Если не разберешся по тому прмеру, то не беспокой меня вопросами, пока осваивай третий метод.

   
 
 автор: realkasper   (26.12.2006 в 16:20)   письмо автору
 
   для: XPraptor   (22.12.2006 в 02:16)
 

Третий метод исключен, потому что скрипт выполняется очень долго, до 20 минут. и естесственно никто не дождется окончания его работы. Нужно чтобы данные из формы передались скрипту POSTом и скрипт бы себе работал тихонько
А в том примере не очень все понятно ( прошу простить за неопытность)
у меня форма с текстовым полем и кнопка (отправить)

   
 
 автор: coloboc66   (26.12.2006 в 17:20)   письмо автору
 
   для: realkasper   (26.12.2006 в 16:20)
 

На аяксе такой скрипт пишется легко и быстро.

   
 
 автор: realkasper   (27.12.2006 в 14:58)   письмо автору
 
   для: coloboc66   (26.12.2006 в 17:20)
 

Если Вас не затруднит подскажите пожалуйста))

   
 
 автор: malish   (27.12.2006 в 15:24)   письмо автору
 
   для: 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) == 0flush();    
  }
}

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

   
 
 автор: realkasper   (05.01.2007 в 20:09)   письмо автору
 
   для: malish   (27.12.2006 в 15:24)
 

Огромное Вам спасибо! Работает чудо как))) Но еще один вопросик))) как сделать чтобы после отправки запроса строка в форме где запрос обнулялась?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования