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

Ваш аккаунт

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

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

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

Ajax jQuery PHP обновить данные вовремя

51K
12 февраля 2010 года
AlexMarlo
14 / / 31.01.2010
Вот такая ситуация дописываю уже
файловый менеджер на php 5 и jquery

интерфейс 2х панельный чтото вроде тотала

 
Код:
$.get("/index.php/file/copy",{path:escape(cop1),pathTo:escape(cop2)},refresh(pc,pc2));

вот так я обращаюсь к серверу для копирования(к примеру, та же проблема и с удалением и с перемещением итд)
всё срабатывает, папка или файл копируются без проблем но храмает обратная связь
 
Код:
refresh(pc,pc2)
который обновляет 2 панели менеджерf вызывается как-то слишком рано и в результате чтоб увидеть изменения приходиться руками уже обновлять ещё раз

кто подскажет решение данной проблему

заранее спасибо)
399
12 февраля 2010 года
KIV
432 / / 20.01.2009
Возможно, сначала отправляется на сервер запрос на копирование, но он выполняется дольше, чем обновление и поэтому список обновляется не правильно.
51K
12 февраля 2010 года
AlexMarlo
14 / / 31.01.2010
Да нет список обновляется правильно просто не вовремя
хочу исправить это но не в ущерб скорости работы
13
12 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Что значит "не вовремя"? опишите подробнее
399
12 февраля 2010 года
KIV
432 / / 20.01.2009
Я про это и говорил "не правильно обновляется". Список обновляется, возможно, до того как завершается копирование.
51K
13 февраля 2010 года
AlexMarlo
14 / / 31.01.2010
подробно)

клиент
Код:
<script type="text/javascript" language="javascript">
        function cop(){
            var pc=$("#p1").text();
            var pc2=$("#p2").text();
            if(pc==pc2){exit;};
           
            var cop1=$(".work1",$(".trSelected").get(0)).text();
            var cop2=$(".work2",$(".trSelected").get(0)).text();
           
            if((cop1=="..")||(cop1=="../")){exit;};
            if((cop2=="..")||(cop2=="../")){exit;};
            if((cop1==".")||(cop1=="./")){exit;};
            if((cop2==".")||(cop2=="./")){exit;};
           
            if((cop2=='')&&(cop1!='')){
               
                cop2=pc2+'/'+cop1;                
                cop1=pc+'/'+cop1;
                $.get("/testdrive/index.php/file/copy",{path:escape(cop1),pathTo:escape(cop2)},refresh(pc,pc2));
            }
            if((cop1=='')&&(cop2!='')){
                                   
                cop1=pc+'/'+cop2;
                cop2=pc2+'/'+cop2;
                $.get("/testdrive/index.php/file/copy",{path:escape(cop2),pathTo:escape(cop1)},refresh(pc,pc2));
            }
        };
</script>

<table id="opMenu" width="200">
    <tbody>
        <td id="cop" width="50"><button &#111;&#110;click="cop();">Copy</button></td>
    </tbody>
</table>


на сервере
сначало запрос идёт сюда
 
Код:
public function actionCopy(){
        if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
        {
            $this->copy(
                realpath(dirname(__FILE__).'\..\..\workDir').str_replace("/","\\",$this->unicodeUrlDecode($_GET['path'])),
                realpath(dirname(__FILE__).'\..\..\workDir').str_replace("/","\\",$this->unicodeUrlDecode($_GET['pathTo'])));
        }
    }

потом вызывается функция копирования
Код:
public function copy($what,$where){
            if(realpath($what)==realpath(dirname(__FILE__).'\..\..\workDir')||realpath($what)==realpath(dirname(__FILE__).'\..\..\workDir\\')){
                exit;
            };
            if(is_file($what)){
                if(!copy($what,$where)){
                    return(1);
                }
            };
            if(is_dir($what)){
               
                mkdir($where);
                $scr=scandir($what);
                array_shift($scr);
                array_shift($scr);
                foreach($scr as $i)
                    {
                        $this->copy($what.'\\'.$i,$where.'\\'.$i);
                    }                
            };
            return(0);
        }


refresh(pc,pc2) показывать не стал потому как это просто обновление и проблема происходит до него

Так вот когда нижимаю кнопу Copy
файл\папка копируется но refresh(pc,pc2) срабатывает раньше и в результате в менеджере мы не видим что файл\папка были скопированы
и приходиться ещё раз обновить данные
13
13 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
А не проще ли сделать чтобы рефреш запускался только после того как скрипт выполняющий копирование ответит что копирование закончено?
51K
13 февраля 2010 года
AlexMarlo
14 / / 31.01.2010
подскажите как
это просто мой первый проект вообще работы с веб
тк что местами элементарных вещей не знаю
13
13 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Примерно так

 
Код:
$.post("/testdrive/index.php/file/copy",{path: escape(cop2), pathTo: escape(cop1)},
   function(data)
   {
      if(data==1)  refresh(pc,pc2);
      else alert("Script has returned error. Data="+data);
   });


Ну и соответственно функция копирующая файл должна по завершении возвращать 1 в браузер.

 
Код:
... // код функции
            echo 1;
            return 0;
51K
13 февраля 2010 года
AlexMarlo
14 / / 31.01.2010
данный вариант совсем не сробатывает
refresh не вызывается совсем
и сообщения об ошибке нет
13
13 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Посмотрите присылает ли РНР скрипт ответ о завершении копирования. Обычная отладка и поиск проблемного места
51K
13 февраля 2010 года
AlexMarlo
14 / / 31.01.2010
дело в том что пишу на фреймворке yii
и даже не представляю как такое отлаживать)
13
13 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
FireBug
51K
14 февраля 2010 года
AlexMarlo
14 / / 31.01.2010
проблема решена без дебагера

дело было не в php
а в моём невнимательном чтении докумнтации по ajax jquery

неправильный вариант
 
Код:
$.get("/testdrive/index.php/file/delete",{path:escape(del2)},refresh(pd,pd2));


исправленный вариант
 
Код:
$.get("/testdrive/index.php/file/delete",{path:escape(del2)},function(xml){refresh(pd,pd2);});


нужно было передавить ссылку на функцию refresh(pd,pd2);
а вместо этого я вызывал саму функцию refresh(pd,pd2); ещё до завершения запроса
13
14 февраля 2010 года
RussianSpy
3.0K / / 04.07.2006
Собственно именно то, что я вам написал в самом начале топика
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог