Открыть Word из JS

Статус
В этой теме нельзя размещать новые ответы.

KilllorD

Создатель
Регистрация
27 Мар 2009
Сообщения
36
Реакции
0
print "<a href=\"javascript:ABC()\" type=\"application/msword\" id=\"a1\"></a>";

в этой строке запускается функция JS, возвращаемое значение этой функции открывается в ворде. Это всё работает, но нужно из функции ABC запускать PHP скрипт, который и генерирует сам этот документ. Но функция завершается быстрей скрипта и никак значение скрипта вернуть не могу. Какие могуть быть решения этой проблемы? или какието другие способы создания документа в ворде?

Функция такого вида:
function ABC(){


$.ajax({
type: "POST",
url: "../print.php",
data: "a=1",
success: function(msg){
alert( "Data Saved: " + msg );
}
});

return msg;
};

Ну естественно msg оказывается пустым, как сделать чтобы ретёрн мог вернуть то что сгенерирует скрипт print.php?
 
Таймауты где-нить в jQuery подкрутить?
Или длинных циклов пустых понаставить чтобы за'sleep'ать ее.
 
я по другому поступил, просто поставил редактор tinyMCE и использовал его вместо ворда, получилось даже лучше
 
Ааа, так это для WYSIWYG нужно было! Конечно tinyMCE лучше подходит для этих целей. Или FCKeditor. А у тебя, получается человек редактировал ворд-документ, пока его ждал Ajax? Или как?
 
а что можно использовать Word внутри страницы в виде редактора? Первый раз о таком слышу
 
Не нужно возвращать результат после работы ajax. надо вызывать функцию при получении результатов. Обычно callback передают. Для этого надо перепроектировать скрипт, чтобы он работал не линейно, а событийно.

function ABC(callback){


$.ajax({
type: "POST",
url: "../print.php",
data: "a=1",
success: function(msg){
alert( "Data Saved: " + msg );
//вот тут и надо вызывать метод генерации чего там надо
}
});
};
 
А можно в двух словах, в чем отличие? (JavaScript только начинаю изучать.)
 
если хотите чтобы вам через ajax пришел файл, то отправляйете его через ифрейм.
Ну а сделать проще через готовый висивиг редактор
 
А можно в двух словах, в чем отличие? (JavaScript только начинаю изучать.)
Дело в том, что яваскрипт выполняется одним потоком. Но вызов ajax - асинхронная операция, поэтому основной поток выполнения js не ждет ответа, а выполняется дальше. Поэтому чтобы не гадать, когда получен ответ и не устраивать охоту за ним, используется событийная модель.
Типичная модель написания кода начинающих программистов - линейная. Это - запустил и оно последовательно все выполняется. Это хорошо работает в пхп.
В яваскрипт используется, так сказать, событийный подход. Любое событие инициирует действие. Поэтому код не выполняется линейно, а только при наступлении события (клик или движении мыши, появление элемента и т.д.). Таким образом ответ от ajax по сути то же событие, поэтому куда удобнее дать ему возможность самому стартовать обработку ответа при его получении. Для этого просто указывается метод, который нужно вызывать, чтобы обработать ответ.
вот как примерно у тебя
Код:
//отсюда начинается выполнение
var url=....
//запрашиваем ajsx
var message=ajaxRequest(url);
//тут обработка ответа
//но тут будет пусто, потому что программа не будет ждать
//пока выполнится ajaxRequest
//можно конечно сделать синхронный вызов, но это будет держать поток программы
//пока не придет ответ
function ajaxRequest(url){
	//тут посылаем запрос ajax и возвращаем ответ
}
а лучше будет так
Код:
//отсюда начинается выполнение
var url=....
//запрашиваем ajax передавая фунцкию обратного вызова
var message=ajaxRequest(url, callback);
//ВОТ ТУТ ГЛАВНОЕ. ПОСЛАЛИ И ЗАБЫЛИ. 
//нужный код обработки сам будет вызван когда нужно
function ajaxRequest(url, callback){
	//тут посылаем запрос ajax и получаем ответ
	//вызываем переданный метод каллбэк, передавая ему ответ
	//также можно ничего не передавать, а тут же на месте и обработать. Принцип тот же -работа по событию
}
// а вот это фукция обратного вызова (оно же callback)
function callback(message){
	//тут обработка ответа
}
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху