Ajax jQuery PHP обновить данные вовремя
От: AlexMarlo  
Дата: 12.02.10 08:59
Оценка:
Вот такая ситуация дописываю уже
файловый менеджер на php 5 и jquery

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

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

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

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

заранее спасибо)
Re: Ajax jQuery PHP обновить данные вовремя
От: monax  
Дата: 12.02.10 14:37
Оценка:
Здравствуйте, AlexMarlo, Вы писали:

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


AM>вот так я обращаюсь к серверу для копирования(к примеру, та же проблема и с удалением и с перемещением итд)

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

А в php файле код как идёт. Может ты там сначала отправляешь ответ, а только после этого удаляешь копируешь файлы?
Re[2]: Ajax jQuery PHP обновить данные вовремя
От: AlexMarlo  
Дата: 12.02.10 23:21
Оценка:
M>А в php файле код как идёт. Может ты там сначала отправляешь ответ, а только после этого удаляешь копируешь файлы?

вот так копиртся и по аналогии осальное
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'])));
}
}


в copy уже само копирование
Re: Ajax jQuery PHP обновить данные вовремя
От: Other Sam Россия  
Дата: 13.02.10 04:26
Оценка:
> Вот такая ситуация дописываю уже
> файловый менеджер на php 5 и jquery
>
> интерфейс 2х панельный чтото вроде тотала
>
> $.get("/index.php/file/copy",{path:escape(cop1),pathTo:escape(cop2)},refresh(pc,pc2));
>
> вот так я обращаюсь к серверу для копирования(к примеру, та же проблема
> и с удалением и с перемещением итд)
> всё срабатывает, папка или файл копируются без проблем но храмает
> обратная связь
> refresh(pc,pc2) который обновляет 2 панели менеджерf вызывается как-то
> слишком рано и в результате чтоб увидеть изменения приходиться руками
> уже обновлять ещё раз
>
> кто подскажет решение данной проблему
>
> заранее спасибо)

Извиняюсь, что раньше не посмотрел сообщение, было некогда.
В вашем коде небольшая опечатка. 3й параметр в $.get() должен быть
ссылкой на функцию которую нужно вызвать по окончанию работы.
$.get(
     "/index.php/file/copy",
     {path:escape(cop1),pathTo:escape(cop2)},
     function(xml){ refresh(pc,pc2); }
);

При этом pc и pc2 будут браться из локльных переменных в области
видимости этого кода (т.е. их нельзя использовать в циклах), а xml — это
аргумент который "принесет" jquery и в котором будет ответ на ваш запрос
— его можно как угодно использовать.

Вот разъяснения по поводу pc и pc2
// ====== НЕ ПРАВИЛЬНО = WRONG WAY =======
for(var i = 0; i < pannels.length(); i++) {
     var pc = panels[i].pc;
     var pc2 = panels[i].pc2;
     $.get(
         "/index.php/file/copy",
         {path:escape(cop1),pathTo:escape(cop2)},
         function(xml){ refresh(pc,pc2); }
     );
}

// ====== ПРАВИЛЬНО = PROPER WAY =======
for(var i = 0; i < pannels.length(); i++) {
     var pc = panels[i].pc;
     var pc2 = panels[i].pc2;
     callAjaxFileCopy(pc, pc2, cop1, cop2);
}
...
function callAjaxFileCopy(pc, pc2, cop1, cop2) {
     $.get(
         "/index.php/file/copy",
         {path:escape(cop1),pathTo:escape(cop2)},
         function(xml){ refresh(pc,pc2); }
     );
}
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Ajax jQuery PHP обновить данные вовремя
От: AlexMarlo  
Дата: 13.02.10 10:29
Оценка:
честно говоря не совсем понял как это связано с моей проблемой
мне нужно чтоб рефреш срабатывал тогда когда операции с файлами\папками на сервре уже произведены
Re[3]: Ajax jQuery PHP обновить данные вовремя
От: monax  
Дата: 13.02.10 18:29
Оценка:
Здравствуйте, AlexMarlo, Вы писали:

AM>в copy уже само копирование


Код этой самой copy покажи. Просто я ж не знаю, по какому принципу идёт вызов команды. Ты ожидаешь завершения команды системы или просто отдаёшь команду и сразу идёшь дальше?
Re[4]: Ajax jQuery PHP обновить данные вовремя
От: AlexMarlo  
Дата: 13.02.10 18:33
Оценка:
сначало идёт


    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);
        }
Re[5]: Ajax jQuery PHP обновить данные вовремя
От: monax  
Дата: 13.02.10 19:29
Оценка:
Здравствуйте, AlexMarlo, Вы писали:

AM>сначало идёт [skip]


Вроде всё нормально. Пока что подозрение падает на яваскриптовый код. refresh(pc,pc2) — если в pc и pc2 ожидается информация о панели, то могут быть ошибки. В pc придёт ответ сервера, pc2 — статус (скорее всего success). Может ошибка в этом?
Re[3]: Ajax jQuery PHP обновить данные вовремя
От: Lloyd Россия  
Дата: 13.02.10 19:32
Оценка: +1
Здравствуйте, AlexMarlo, Вы писали:

AM>честно говоря не совсем понял как это связано с моей проблемой

AM>мне нужно чтоб рефреш срабатывал тогда когда операции с файлами\папками на сервре уже произведены

Просто пройдите отладчиком ваш вариант и исправленный и все сразу встанет на свои места.
Re[4]: Ajax jQuery PHP обновить данные вовремя
От: AlexMarlo  
Дата: 13.02.10 19:45
Оценка:
всё это
на фрймворе сделано
так что наверно придётся FireBug поставить)
Re[6]: Ajax jQuery PHP обновить данные вовремя
От: AlexMarlo  
Дата: 13.02.10 19:48
Оценка:
вот яваскриптовый код


    <script type="text/javascript" language="javascript">         
        function go(value,value2,value3){
            if(value3=="1"){                
                $("#pan1").empty();
                $("#pan1").load("/testdrive/index.php/file/manager?path="+escape(value)+"&path2="+escape(value2)+"&panel=1");
                }
            else{                
                if(value3=="2"){
                    $("#pan2").empty();                    
                    $("#pan2").load("/testdrive/index.php/file/manager?path="+escape(value)+"&path2="+escape(value2)+"&panel=2");
                    }
                }
            $('#rb1').val(escape(value+'/'));
            $('#rb2').val(escape(value2+'/'));
            //alert(value+'--'+value2);
        };
        function refresh(p,p2){
            go(p,p2,'1');
            go(p,p2,'2');
        };     
    </script>

может что и не так просто это мой первый опыт в веб
Re[6]: Ajax jQuery PHP обновить данные вовремя
От: AlexMarlo  
Дата: 13.02.10 19:51
Оценка:
сново там не весь код написал
вот яваскрипт

        function go(value,value2,value3){
            if(value3=="1"){                
                $("#pan1").empty();
                $("#pan1").load("/testdrive/index.php/file/manager?path="+escape(value)+"&path2="+escape(value2)+"&panel=1");
                }
            else{                
                if(value3=="2"){
                    $("#pan2").empty();                    
                    $("#pan2").load("/testdrive/index.php/file/manager?path="+escape(value)+"&path2="+escape(value2)+"&panel=2");
                    }
                }
            $('#rb1').val(escape(value+'/'));
            $('#rb2').val(escape(value2+'/'));
            //alert(value+'--'+value2);
        };
        function refresh(p,p2){
            go(p,p2,'1');
            go(p,p2,'2');
        };  

        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));
            }
        };
Re[7]: Ajax jQuery PHP обновить данные вовремя
От: rameel https://github.com/rsdn/CodeJam
Дата: 13.02.10 20:21
Оценка:
Здравствуйте, AlexMarlo, Вы писали:

AM>сново там не весь код написал

AM>вот яваскрипт

AM>
AM>        function go(value,value2,value3){

            <<скипнуто>>

AM>            if((cop2=='')&&(cop1!='')){
                
AM>                cop2=pc2+'/'+cop1;                
AM>                cop1=pc+'/'+cop1;
AM>                $.get("/testdrive/index.php/file/copy",{path:escape(cop1),pathTo:escape(cop2)},refresh(pc,pc2));
AM>            }
AM>            if((cop1=='')&&(cop2!='')){
                                    
AM>                cop1=pc+'/'+cop2;
AM>                cop2=pc2+'/'+cop2;
AM>                $.get("/testdrive/index.php/file/copy",{path:escape(cop2),pathTo:escape(cop1)},refresh(pc,pc2));
AM>            }
AM>        };
AM>


Проблема в выделенном. Ты вызываешь функцию refresh еще до вызова самой функции get. Соответственно, вместо ожидаемой функции обратного вызова ты передаешь результат ее работы, ну и как следствие получается не как хотелось бы. Как сделать правильно, тебе подсказали сообщением ранее

$.get(
    "/testdrive/index.php/file/copy",
    { path:escape(cop2), pathTo:escape(cop1) },
    function(xml){ refresh(pc,pc2); } // <<<< Эта функция будет дернута у нутрях, которая уже, как видишь, вызовает твою функцию
);
... << RSDN@Home 1.2.0 alpha 4 rev. 1437>>
Re[8]: Ajax jQuery PHP обновить данные вовремя
От: monax  
Дата: 13.02.10 20:52
Оценка:
Здравствуйте, rameel, Вы писали:

R>
R>$.get(
R>    "/testdrive/index.php/file/copy",
R>    { path:escape(cop2), pathTo:escape(cop1) },
R>    function(xml){ refresh(pc,pc2); } // <<<< Эта функция будет дернута у нутрях, которая уже, как видишь, вызовает твою функцию
R>);
R>


Можно попробовать более удобный вариант. Если функция рефреша вызывается после каждого запроса на сервер, то удобнее сделать так:
function successRequest(requestData) {
    refresh(pc, pc2);    
}
$.get('/testdrive/index.php/file/copy', {path:escape(cop1),pathTo:escape(cop2)}, successRequest);
Re[8]: Ajax jQuery PHP обновить данные вовремя
От: AlexMarlo  
Дата: 13.02.10 21:33
Оценка:
ага всё пошло
спасибо большое за доходчивое объяснение

просто первый мой проект на веб и приходиться сразу 2 языка учить и кучу технологий
вот мелочи и упускаю
Re[3]: Ajax jQuery PHP обновить данные вовремя
От: Other Sam Россия  
Дата: 14.02.10 13:02
Оценка:
> честно говоря не совсем понял как это связано с моей проблемой
> мне нужно чтоб рефреш срабатывал тогда когда операции с файлами\папками
> на сервре уже произведены

БЛИН! НУ Я ЖЕ БОЛДОМ ВЫДЕЛИЛ ПРОБЛЕМНОЕ МЕСТО!!!!

Ваш вызов:
$.get("/index.php/file/copy",{path:escape(cop1),pathTo:escape(cop2)},refresh(pc,pc2));
Как происходит выполнение???
Интерпретатор вычисляет все параметры и затем делает вызов функции get и
передает туда все эти параметры.
Последний параметр — refresh(pc, pc2) — ЭТО ВЫЗОВ ФУНКЦИИ!
То есть, для тех кто в танке, вызов refresh произойдет ДО вызова get!

Функция get в качестве третьего параметра ожидает ссылку на функцию
которую JQuery вызовет после выполнения запроса. То есть нужно в
качестве параметра передать не результат выполнения refresh(pc, pc2), а
ссылку на функцию в которой будет вызвана ваша функция. То есть вот "оно":

function(xml){ refresh(pc,pc2); }

Теперь понятно???
Posted via RSDN NNTP Server 2.1 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.