当有多个uploadify实例时,不传递scriptData

时间:2010-12-15 12:00:50

标签: javascript jquery upload uploadify

我的表单中有两个uploadify实例。你会在下面找到定义。

两个触发上传的按钮。图像按钮是唯一与问题相关的按钮:

$( "#btnimageupload" ).button().click(function()
{
 $('#picbrowse').uploadifySettings( 'scriptData', ({ 'isSelected': $( '#selectImage' ).val() }));
 $('#picbrowse').uploadifyUpload();
});

现在,就是问题:

单击btnimageupload按钮时,图像无法上传。进度条转到100并停止。没有错误,javascript或其他。

但是,当我禁用vdobrowse文件输入框及其相应的脚本时,一切正常。上传图像并传输数据。

这是一个棘手的部分...如果我没有在btnimageupload点击处理程序上传递scriptData,图像将上传甚至页面上的vdobrowse文件输入框。

所以在我看来,当页面上有多个uploadify实例时,scriptData会破坏uploadify。

任何人都知道如何解决这个问题?

上传定义

$('#picbrowse').uploadify(
{
 uploader  : 'script/uplodify/uploadify.swf',
 script    : '../../dopost.php',
 cancelImg : 'script/uplodify/cancel.png',
 folder    : '/images',
 queueID   : 'picqueue',
 auto      : false,
 multi     : true,
 fileDesc    : 'Image Files',
 fileExt     : '*.gif;*.jpg;',
 queueSizeLimit: 5,
 scriptData:
 ({
  'action': 'upload_image',
 }),
 onComplete: function( event, queueID, fileObj, response, data )
 {
  console.log( reponse)
 }
});

$('#vdobrowse').uploadify(
{
 uploader  : 'script/uplodify/uploadify.swf',
 script    : '../../dopost.php',
 cancelImg : 'script/uplodify/cancel.png',
 folder    : '/video',
 queueID   : 'vdoqueue',
 auto      : false,
 multi     : true,
 fileDesc    : 'Video Files',
 fileExt     : '*.avi;*.mpg;*.mov;*.mp4;*.mpeg;*.flv;*.mkv;*.wmv',
 queueSizeLimit: 5,
 scriptData:
 {
  action: 'upload_video'
 },
 onComplete: function( event, queueID, fileObj, response, data )
 {
  console.log( response );
 }

});

3 个答案:

答案 0 :(得分:1)

  

该插件似乎正在推出   全球空间的选择,即   为什么当你使用两个或更多   uploadify与scriptData一起使用   拿起最后一个存储的值   scriptData。

     

我看到在一个上面运行两个uploadify   这是一个毫无意义的运动   我从来没有测试过功能   多个uploadify的。   uploadifySettings与之完美配合   一个uploadify。多个uploadify的   是演示页面来演示   不同的设置可能。

     

那说,它显然仍然是一个   用户的问题,我们需要   为那些想要使用的人修复它   多个uploadify在同一页面上。

Forum

我建议使用swfUpload。我在我的项目中使用并使用多个实例进行测试,它的工作非常完美。所以swfUpload易于理解,api看起来像uploadify api。

答案 1 :(得分:1)

鉴于页面上的scriptData和多个Uploadifys似乎存在限制,您可以做的是跳过scriptData和文件夹属性并解析dopost.php中的文件类型并根据它执行操作。 / p>

例如:

$fileParts  = pathinfo($_FILES['Filedata']['name']);
$extension = strtolower($fileParts['extension']);
switch($extension){
    case "gif" | "jpg":
        // Do Image Upload Action
    break;
    case "avi" | "mpg" | "mov" | "mp4" | "mpeg" | "flv" | "mkv" | "wmv":
        // Do Video Upload Action
    break;
}

答案 2 :(得分:1)

我收到了scripData就好了,我在my website上做了一个例子 出于显而易见的原因,我已将上传大小限制为500KB并更正了代码:

$('#picbrowse').uploadify(
{
    uploader  : 'uploadify.swf',
    script    : 'uploadify.php',
    cancelImg : 'cancel.png',
    folder    : 'uploads/images',
    queueID   : 'picqueue',
    auto      : false,
    multi     : true,
    removeCompleted : false,
    fileDesc    : 'Image Files',
    fileExt     : '*.gif;*.jpg',
    sizeLimit   : 512000,
    queueSizeLimit: 5,
    scriptData: {action: 'upload_image'},
    onComplete: function( event, queueID, fileObj, response, data )
    {
        $ul.html('');
        var json = jQuery.parseJSON(response);
        $.each(json,function(k,v){
            var li = "<li>"+k+": "+v+"</li>";
            $ul.append(li);
        });
    },
    onError: function (event,ID,fileObj,errorObj) {
        console.log(errorObj.type + ' Error: ' + errorObj.info);
    }
});

$('#vdobrowse').uploadify(
{
    uploader  : 'uploadify.swf',
    script    : 'uploadify.php',
    cancelImg : 'cancel.png',
    folder    : 'uploads/video',
    queueID   : 'vdoqueue',
    auto      : false,
    multi     : true,
    sizeLimit   : 512000,
    fileDesc    : 'Video Files',
    fileExt     : '*.avi;*.mpg;*.mov;*.mp4;*.mpeg;*.flv;*.mkv;*.wmv',
    queueSizeLimit: 5,
    scriptData: {action: 'upload_video'},
    onComplete: function( event, queueID, fileObj, response, data )
    {
        $ul.html('');
        var json = jQuery.parseJSON(response);
        $.each(json,function(k,v){
            var li = "<li>"+k+": "+v+"</li>";
            $ul.append(li);
        });
    }

});

我正在使用标准的uploadify.php并回显POST变量:

echo json_encode($_POST);