【问题标题】:scriptData not being passed when there are multiple instances of uploadify有多个uploadify实例时未传递scriptData
【发布时间】:2010-12-15 12:00:49
【问题描述】:

我的表单中有两个 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 );
 }

});

【问题讨论】:

  • 为什么不分享标记和 dopost.php 以便我们重现问题?

标签: javascript jquery upload uploadify


【解决方案1】:

插件似乎将 全局空间的选项,即 为什么当你使用两个或更多 uploadify 的 scriptData 是 拾取最后存储的值 脚本数据。

我看到在一个上运行两个 uploadify 页一个毫无意义的练习,因此 我从不测试功能 多个uploadify的。 uploadifySettings 完美配合 一个上传。多个uploadify的 是演示页面 可能有不同的设置。

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

Forum

我建议使用swfUpload。我在我的项目中使用并使用多个实例进行了测试,并且效果很好。所以 swfUpload 简单易懂,api 看起来像 uploadify api。

【讨论】:

    【解决方案2】:

    鉴于页面上的 scriptData 和多个 Uploadify 似乎存在限制,您可以做的是跳过 scriptData 和文件夹属性并解析出 dopost.php 中的文件类型并基于此采取行动。

    例如:

    $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;
    }
    

    【讨论】:

    • 这是我需要发送的数据{ 'isSelected': $( '#selectImage' ).val() },它来自一个下拉框。
    【解决方案3】:

    我收到 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 2011-09-09
      相关资源
      最近更新 更多