Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> возникающие ошибки ajaxfileupload 
:(
    Опции темы
WebDragon
  Дата 13.12.2010, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 24.12.2007
Где: г. Липецк

Репутация: нет
Всего: нет



Здравствуйте!

Я Использую jquery + ajaxfileupload.

В проекте загружаются фотографии на сервер без перезагрузки страницы. Работает со многими файлами, но есть файлы, загружая которые возникает следующая ошибка(не зависимо от имени файла и его размера):

SyntaxError: at index 7: expected expression, got '<'

В чем может быть причина и что значит эта ошибка?
PM MAIL ICQ   Вверх
bars80080
Дата 13.12.2010, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 3
Всего: 315



интересно, а номера строки найти не удалось?
не удалось поднять код и посмотреть, какая же строчка вызывает эту ошибку?
PM MAIL WWW   Вверх
Любитель
Дата 13.12.2010, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



Покажи серверный хендлер. Если честно, не смотрел, но раз там не флеш, значит сабмит формы в ифрейм. Значит надо вывод энкодить тем или иным способом.


--------------------
PM MAIL ICQ Skype   Вверх
WebDragon
Дата 13.12.2010, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 24.12.2007
Где: г. Липецк

Репутация: нет
Всего: нет



Вообще мне главное понять о чем эта ошибка...

вот функция вызова uploada:
Код

    function ajaxFileUpload()
    {
        $("#loading_new_foto").fadeIn(speed);
        $.ajaxFileUpload
        ({
            url:'/foto/newfoto/albumid/' + album_id + '/',
            secureuri:false,
            dataType: 'json',
            fileElementId:'new_foto',
            success: function (data, status)
            {
                $("#loading_new_foto").fadeOut(speed);
                $("#add_foto").after('<td id="foto' + data.fotoid + '" height=100 align="center" valign="bottom" style="padding-left:10px;">'
                                    + '<a onClick="goPreview(' + data.fotoid + ');"><img src="/picfoto.php?foto=' + data.file + '&size=small" border=0></a><br>'
                                    + '<img id="yeshomefoto' + data.fotoid + '" class="yeshomefoto" src="/image/yeshomefoto.png" width=15 style="display:none;" title="Основная">'
                                    + '<img onclick="homeFoto(' + data.fotoid + ',\'' + data.file + '\');$(this).fadeTo(300,0);homefoto[' + data.fotoid + ']=1;" onmouseover="$(this).fadeTo(300,1);" onmouseout="if (homefoto[' + data.fotoid + ']!=1) $(this).fadeTo(300,0.2);" onLoad="$(this).fadeTo(150,0.2);" style="cursor:pointer;" class="homefoto" src="/image/homefoto.png" width=15 title="Сделать основной">'
                                    + '<img onclick="delFoto(' + data.fotoid + ');$(this).fadeTo(300,0);foto[' + data.fotoid + ']=1;" onmouseover="$(this).fadeTo(300,1);" onmouseout="if (foto[' + data.fotoid + ']!=1) $(this).fadeTo(300,0.2);" onLoad="$(this).fadeTo(150,0.2);" style="cursor:pointer;" class="delete" src="/image/delete.png" width=15 title="Удалить"></td>');
            },
            error: function (data, status, e)
            {
                alert(e);
            }
        })
        return false;
    }

Вот здесь сама форма:
Код

                <form name="form" id="form_new_foto" action="" method="POST" enctype="multipart/form-data">
                    <img src="/image/add_foto.png" id="add_foto" align="top" style="position:absolute;z-index:2;opacity:0.5;">
                    <div id="loading_new_foto" align="center" style="position:absolute;padding-left:19px;padding-top:31px;display:none;z-index:1;">
                        <img src="/image/loading_mini.gif">
                    </div>
                    <input id="new_foto" name="new_foto" type="file" style="position:absolute;padding-left:-70px;z-index:3;opacity:0;cursor:pointer;width:70px;height:95px; border:1px solid silver;background-color:white;" OnChange="ajaxFileUpload();">
                </form>

Вот код обработки изображения (контроллер zendframework):
Код

        $error = "";
        $msg = "";
        $fileElementName = 'new_foto';
        if(!empty($_FILES[$fileElementName]['error']))
        {
            switch($_FILES[$fileElementName]['error'])
            {
                case '1':
                    $error = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
                    break;
                case '2':
                    $error = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';
                    break;
                case '3':
                    $error = 'The uploaded file was only partially uploaded';
                    break;
                case '4':
                    $error = 'No file was uploaded.';
                    break;
                case '6':
                    $error = 'Missing a temporary folder';
                    break;
                case '7':
                    $error = 'Failed to write file to disk';
                    break;
                case '8':
                    $error = 'File upload stopped by extension';
                    break;
                case '999':
                default:
                    $error = '';
            }
        }elseif(empty($_FILES[$fileElementName]['tmp_name']) || $_FILES[$fileElementName]['tmp_name'] == 'none')
        {
            $error = 'No file was uploaded..';
        }else
        {
            $path="data/foto/";
            $file_id = 1;
            while (is_file($path . 'id' . $_SESSION['id'] . '_' . $file_id . '.jpg')){
                $file_id++;
            }
            $file = 'id' . $_SESSION['id'] . '_' . $file_id . '.jpg';
            if (!file_exists($path . $file)){
                    $size_img = getimagesize($_FILES[$fileElementName]['tmp_name']);
                    if ($size_img[0]>=$size_img[1]){
                        $src_ratio=$size_img[0]/$size_img[1];
                        $h = 500;
                        $w = $h*$src_ratio;
                    }
                    else{
                        $src_ratio=$size_img[1]/$size_img[0];
                        $w = 500;
                        $h = $w*$src_ratio;
                    }
                    $dest_img = imagecreatetruecolor($w, $h);
                 $white = imagecolorallocate($dest_img, 255, 255, 255);
                    if ($size_img[2]==2)  $src_img = imagecreatefromjpeg($_FILES[$fileElementName]['tmp_name']);
                 else if ($size_img[2]==1) $src_img = imagecreatefromgif($_FILES[$fileElementName]['tmp_name']);
                 else if ($size_img[2]==3) $src_img = imagecreatefrompng($_FILES[$fileElementName]['tmp_name']);
                 imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);
                    if ($size_img[2]==2)  imagejpeg($dest_img, $path . $file);
                 else if ($size_img[2]==1) imagegif($dest_img, $path . $file);
                 else if ($size_img[2]==3) imagepng($dest_img, $path . $file);
            }

            $msg = " Фотография загружена ";
            @unlink($_FILES[$fileElementName]);
        }
        $this->view->error = $error;
        $this->view->msg = $msg;
        $this->view->file = $file;

Вот вьювер зенда:
Код

{
    data:'<?php if ($this->error!='') echo $this->error; else echo $this->msg;?>',
    fotoid:'<?php echo $this->foto_id;?>',
    file:'<?php echo $this->file;?>'
}


библиотеку ajaxfileupload использую обычную с оф. сайта.
PM MAIL ICQ   Вверх
Любитель
Дата 13.12.2010, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



Да, не угадал я smile Вряд ли тут будет что-т просто понять.. Хотя, я всё-таки не понял откуда берётся foto_id (в $this->view вроде не видать по коду), но да ладно.

Давай по-другому. Открой любую моинотрилку сетевых запросов (тотже файербаг). Грузи "кривой" файл и скопируй респонс последнего запроса на твой хендлер.


--------------------
PM MAIL ICQ Skype   Вверх
WebDragon
  Дата 13.12.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 24.12.2007
Где: г. Липецк

Репутация: нет
Всего: нет



Когда я в опере включаю отладчик и начинаю мониторить запросы, он мне при загрузке файла(кривого) сразу выдает:

SyntaxError: at index 5 in "data = ": expected expression, got <end of file>
PM MAIL ICQ   Вверх
WebDragon
  Дата 23.12.2010, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 24.12.2007
Где: г. Липецк

Репутация: нет
Всего: нет



Видимо никто не сталкивался с этой проблемой и не поможет
PM MAIL ICQ   Вверх
Любитель
Дата 23.12.2010, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 1
Всего: 92



Ну.. Если есть возможность выставить где-нить демо страничку - посмотреть, я б лично посмотрел..
Цитата

SyntaxError: at index 5 in "data = ": expected expression, got <end of file> 

Это как я понимаю, выдаёт JS engine? Или это респонс от пхп? Какой респонс на сетевой запрос приходит (контент, статус код)?


--------------------
PM MAIL ICQ Skype   Вверх
AlexHappy
Дата 10.5.2013, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 10.5.2013

Репутация: нет
Всего: нет



Лечится - это так:

в файле  ajaxfileupload.js внизу в самом 
 data = type == "xml" || data ? r.responseXML : r.responseText != "" ? r.responseText : r.responseXML.activeElement.innerText;

а лучше так (ибо это чисто глючит опера, т.к. при дебаге с брякой все хорошо и без ошибок ) в файле ajaxfilemanager.js

Код

$.ajaxFileUpload
        (
            {......
            
                    
                },
                error: function (data, status, e)
                {
                    $('#ajax' + elementId).hide();
                    if(e!= 'SyntaxError: at index 5 in "data = ": expected expression, got <end of file>')
                    {
                     alert(e);
                    }

                }
            }
        )    


Это сообщение отредактировал(а) AlexHappy - 10.5.2013, 22:39
PM MAIL   Вверх
ebuilder
Дата 12.5.2013, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.5.2013

Репутация: нет
Всего: нет



Цитата(AlexHappy @ 10.5.2013,  22:38)
Лечится - это так:

в файле  ajaxfileupload.js внизу в самом 
 data = type == "xml" || data ? r.responseXML : r.responseText != "" ? r.responseText : r.responseXML.activeElement.innerText;

а лучше так (ибо это чисто глючит опера, т.к. при дебаге с брякой все хорошо и без ошибок ) в файле ajaxfilemanager.js

Код

$.ajaxFileUpload
        (
            {......
            
                    
                },
                error: function (data, status, e)
                {
                    $('#ajax' + elementId).hide();
                    if(e!= 'SyntaxError: at index 5 in "data = ": expected expression, got <end of file>')
                    {
                     alert(e);
                    }

                }
            }
        )    

Да все это круто конечно)

Но, проблема скорее не Оперы, а совместимости скрипта Ajax File Uploader V2.1 (ajaxfileupload.js) с jquery версии > 1.5

Просто Опера в отличии от FF с FireBug, начинает ругаться

хотя, взять ваш код и вместо $('#ajax' + elementId).hide(); напишем elementId:

Код

error: function (data, status, e) {    

                    elementId
                    if(e!= 'SyntaxError: at index 5 in "data = ": expected expression, got <end of file>')
                    {
                     alert(e)
                    }


опера переходит к выполнению "success: function (data, status) {..." -  значит с оперой глюк


Также, кроме ошибки "SyntaxError: at index 5 in "data...", замечена остановка работы загрузчика после загрузки 1-го изображения -  это во всех бразерах на версии jquery > 1.5

Что скажите?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0844 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.