вот так я обращаюсь к серверу для копирования(к примеру, та же проблема и с удалением и с перемещением итд)
всё срабатывает, папка или файл копируются без проблем но храмает обратная связь
refresh(pc,pc2) который обновляет 2 панели менеджерf вызывается как-то слишком рано и в результате чтоб увидеть изменения приходиться руками уже обновлять ещё раз
Здравствуйте, 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 файле код как идёт. Может ты там сначала отправляешь ответ, а только после этого удаляешь копируешь файлы?
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'])));
}
}
> Вот такая ситуация дописываю уже > файловый менеджер на 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() должен быть
ссылкой на функцию которую нужно вызвать по окончанию работы.
При этом 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); }
);
}
честно говоря не совсем понял как это связано с моей проблемой
мне нужно чтоб рефреш срабатывал тогда когда операции с файлами\папками на сервре уже произведены
Здравствуйте, AlexMarlo, Вы писали:
AM>в copy уже само копирование
Код этой самой copy покажи. Просто я ж не знаю, по какому принципу идёт вызов команды. Ты ожидаешь завершения команды системы или просто отдаёшь команду и сразу идёшь дальше?
Здравствуйте, AlexMarlo, Вы писали:
AM>сначало идёт [skip]
Вроде всё нормально. Пока что подозрение падает на яваскриптовый код. refresh(pc,pc2) — если в pc и pc2 ожидается информация о панели, то могут быть ошибки. В pc придёт ответ сервера, pc2 — статус (скорее всего success). Может ошибка в этом?
Здравствуйте, AlexMarlo, Вы писали:
AM>честно говоря не совсем понял как это связано с моей проблемой AM>мне нужно чтоб рефреш срабатывал тогда когда операции с файлами\папками на сервре уже произведены
Просто пройдите отладчиком ваш вариант и исправленный и все сразу встанет на свои места.
Проблема в выделенном. Ты вызываешь функцию refresh еще до вызова самой функции get. Соответственно, вместо ожидаемой функции обратного вызова ты передаешь результат ее работы, ну и как следствие получается не как хотелось бы. Как сделать правильно, тебе подсказали сообщением ранее
$.get(
"/testdrive/index.php/file/copy",
{ path:escape(cop2), pathTo:escape(cop1) },
function(xml){ refresh(pc,pc2); }// <<<< Эта функция будет дернута у нутрях, которая уже, как видишь, вызовает твою функцию
);
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);
> честно говоря не совсем понял как это связано с моей проблемой > мне нужно чтоб рефреш срабатывал тогда когда операции с файлами\папками > на сервре уже произведены
БЛИН! НУ Я ЖЕ БОЛДОМ ВЫДЕЛИЛ ПРОБЛЕМНОЕ МЕСТО!!!!
Ваш вызов:
$.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), а
ссылку на функцию в которой будет вызвана ваша функция. То есть вот "оно":