Работа с textarea
Нашел скрипт для управления веб-камерой, все работает, все замечательно, но возникла проблема с добавлением описания к сделанным фото. Дело с том, что после того, как предварительно захватив изображение, появляются кнопки "переснять" и "сохранить", я попытался добавить еще элемент формы textarea, но вот собственно сам текст не удается обработать, пытался передавать его обычным POST, но думаю php тут не обойтись, а js у меня плоховато:( Может кто-нибудь подскажет, поможет как это сделать?
$(document).ready(function(){
var camera = $('#camera'),
photos = $('#photos'),
screen = $('#screen');
var template = '<a href="uploads/original/{src}" rel="cam" '
+'style="background-image:url(uploads/thumbs/{src})"></a>';
/*----------------------------------
Установки веб камеры
----------------------------------*/
webcam.set_swf_url('assets/webcam/webcam.swf');
webcam.set_api_url('upload.php'); // Скрипт загрузки
webcam.set_quality(80); // Качество фотографий JPEG
webcam.set_shutter_sound(true, 'assets/webcam/shutter.mp3');
// Генерируем код HTML для камеры и добавляем его на страницу:
screen.html(
webcam.get_html(screen.width(), screen.height())
);
/*------------------------------
Обработчики событий
-------------------------------*/
var shootEnabled = false;
$('#shootButton').click(function(){
if(!shootEnabled){
return false;
}
webcam.freeze();
togglePane();
return false;
});
$('#cancelButton').click(function(){
webcam.reset();
togglePane();
return false;
});
$('#uploadButton').click(function(){
webcam.upload();
webcam.reset();
togglePane();
return false;
});
camera.find('.settings').click(function(){
if(!shootEnabled){
return false;
}
webcam.configure('camera');
});
// Показываем и скрываем панель камеры:
var shown = false;
$('.camTop').click(function(){
$('.tooltip').fadeOut('fast');
if(shown){
camera.animate({
bottom:-466
});
}
else {
camera.animate({
bottom:-5
},{easing:'easeOutExpo',duration:'slow'});
}
shown = !shown;
});
$('.tooltip').mouseenter(function(){
$(this).fadeOut('fast');
});
/*----------------------
Возвратные вызовы
----------------------*/
webcam.set_hook('onLoad',function(){
// Когда FLASH загружен, разрешаем доступ
// к кнопкам "Снимаю" и "Установка"
shootEnabled = true;
});
webcam.set_hook('onComplete', function(msg){
// Данный ответ возвращается upload.php
// и содержит имя изображения в формате объекта JSON
msg = $.parseJSON(msg);
if(msg.error){
alert(msg.message);
}
else {
// Добавляем его на страницу
photos.prepend(templateReplace(template,{src:msg.filename}));
initFancyBox();
}
});
webcam.set_hook('onError',function(e){
screen.html(e);
});
Далее получаем jpeg-файл
<?php
session_start();
include ("blocks/bd.php");
/*
Данный скрипт получает снимок JPEG
из webcam.swf как запрос POST.
*/
// Нам нужно обрабатывать только запрос POST:
if(strtolower($_SERVER['REQUEST_METHOD']) != 'post'){
exit;
}
$folder = 'uploads/';
$filename = md5($_SERVER['REMOTE_ADDR'].rand()).'.jpg';
$original = $folder.$filename;
// Снимок JPEG отправляется в необработанном виде:
$input = file_get_contents('php://input');
if(md5($input) == '7d4df9cc423720b7f1f3d672b89362be'){
// Черное изображение. Нам оно без надобности.
exit;
}
$result = file_put_contents($original, $input);
if (!$result) {
echo '{
"error" : 1,
"message" : "Ошибка сохранения изображения. Убедитесь, что папка uploads и ее вложенные каталоги имеет chmod 777."
}';
exit;
}
$info = getimagesize($original);
if($info['mime'] != 'image/jpeg'){
unlink($original);
exit;
}
// Перемещаем временный файл в оригинальную папку:
rename($original,'uploads/original/'.$filename);
$original = 'uploads/original/'.$filename;
// Используем библиотеку GD для изменения размера
// для миниатюры:
$w = 260;
$origImage = imagecreatefromjpeg($original);
$w_src = imagesx($origImage);
$h_src = imagesy($origImage);
$newImage = imagecreatetruecolor($w,$w);
imagecopyresampled($newImage,$origImage,0,0,round((max($w_src,$h_src)-min($w_src,$h_src))/2),0,$w,$w,min($w_src,$h_src),min($w_src,$h_src));
imagejpeg($newImage,'uploads/thumbs/'.$filename);
$date = date("Y-m-d");
$result = mysql_query ("INSERT INTO photos (id_user,photo,p_date) VALUES('$_SESSION[id]','$filename','$date')");
echo '{"status":1,"message":"Success!","filename":"'.$filename.'"}';
?>
в таблице photos есть еще одно поле description, в него то и хотел записывать текст из textarea |
А в какой строчке происходят манипуляции с текстарией? Чет не вижу.
|
изначально скрипт без нее. вот я и хочу узнать, как можно ее туда прикрутить?
вот в это место, я думаю:
$('#shootButton').click(function(){
if(!shootEnabled){
return false;
}
webcam.freeze();
togglePane();
return false;
});
$('#cancelButton').click(function(){
webcam.reset();
togglePane();
return false;
});
$('#uploadButton').click(function(){
webcam.upload();
webcam.reset();
togglePane();
return false;
});
/* наверное здесь должна быть еще одна функция с обработкой текста из текстареа*/
а потом дать доступ к текстареа, помимо "снимаю" и "установка"
webcam.set_hook('onLoad',function(){
// Когда FLASH загружен, разрешаем доступ
// к кнопкам "Снимаю" и "Установка"
shootEnabled = true;
});
|
Визуально так:
1) ![]() 2)CLICK => 3) ![]() 4)Нажимаем сохранить, фото и описание из текстареа улетают в пхп обработчик. |
Rompo,
function sendText() {
var req = new XMLHttpRequest(),
text = document.getElementById('textarea').value;
req.onreadystatechange = function() {
if (req.readyState == 4) {
if(req.status == 200) {
//ловим ответ от сервера
}
}
};
req.open('POST', 'urlTo_file.php', true);
req.send(text);//отправляем текст
}
|
Тогда я добавляю вызов функции в
$('#uploadButton').click(function(){
webcam.upload();
webcam.reset();
sendText(); //СЮДА
togglePane();
return false;
});
и получаю текст с помощью, как я думаю: $text = $_REQUEST['text']; или $text = $_POST['text']; но ни то, ни другое не срабатывает.. в чем моя ошибка? |
Цитата:
|
А можно какой-нибудь пример? я похоже не правильно вас понял.
попробовал запихать функцию в webcam.upload(), но тоже ничего не получилось:
upload: function(url, callback) {
// upload image to server after taking snapshot
// specify fully-qualified URL to server API script
// and callback function (string or function object)
if (callback) this.set_hook('onComplete', callback);
if (url) this.set_api_url(url);
this.get_movie()._upload( this.api_url );
this.sendText(); // вызов вот здесь
},
в описание функции добавил просто этот код:
sendText: function(){
var req = new XMLHttpRequest(),
text = document.getElementById('text_descr').value;
req.onreadystatechange = function() {
if (req.readyState == 4) {
if(req.status == 200) {
alert('!!!');
}
}
};
req.open('POST', 'upload.php', true);
req.send(text);//отправляем текст
},
|
Так тебе вторым запросом отдельно можно передать описание? А как сервер свяжет эти два запроса? Надо какой-то айдишник или что передавать. В любом случае два запроса - это плохо.
this.get_movie()._upload - получается эта функция делает запрос? А где ее код? И может она предоставляет хук для добавления своих данных? |
get_movie: function() {
// get reference to movie object/embed in DOM
if (!this.loaded) return alert("ERROR: Movie is not loaded yet");
var movie = document.getElementById('webcam_movie');
if (!movie) alert("ERROR: Cannot locate movie 'webcam_movie' in DOM");
return movie;
},
Я тоже подумал, что из-за 2х запросов не работает, а одним отправить не знаю как. И еще можешь объяснить, что такое хук? Он функцию вызывает или как? |
| Часовой пояс GMT +3, время: 07:17. |