jQuery文件上传,指定FormData

3
我正在使用以下jQuery文件上传插件:

https://github.com/blueimp/jQuery-File-Upload/wiki/Options

我需要指定额外的表单数据,文档中提到有一个选项可以实现,但是我遇到了JS错误“Uncaught SyntaxError: Unexpected identifier”,并且没有FormData的示例,这让我很难解决问题。

以下是我的代码:

$(function () {
    $('.upload').fileUploadUI({
        uploadTable: $('.upload_files'),
        downloadTable: $('.download_files'),
        buildUploadRow: function (files, index) {
            var file = files[index];
            return $(
                '<tr>' +
                '<td>' + file.name + '<\/td>' +
                '<td class="file_upload_progress"><div><\/div><\/td>' +
                '<td class="file_upload_cancel">' +
                '<div class="ui-state-default ui-corner-all ui-state-hover" title="Cancel">' +
                '<span class="ui-icon ui-icon-cancel">Cancel<\/span>' +
                '<\/div>' +
                '<\/td>' +
                '<\/tr>'
            );
        },
        buildDownloadRow: function (file) {
            return $(
                '<tr><td>' + file.name + ' ' + file.type + ' ' + file.size + '<\/td><\/tr>'
            );
        },
  formData: 
   [
     {
       name: '_http_accept'
       value: 'application/javascript'
     },
     {
       name: '<%= session_key_name %>'
       value: encodeURIComponent('<%= u cookies[session_key_name] %>'),
     },
     {
       name: 'authenticity_token'
       value: encodeURIComponent('<%= u form_authenticity_token %>')
     }
   ]
    });
});
1个回答

7

您的formData中逗号的位置不正确,我认为您希望它像这样:

formData: [
    {
        name: '_http_accept',
        value: 'application/javascript'   
    }, {
        name: '<%= session_key_name %>',
        value: encodeURIComponent('<%= u cookies[session_key_name] %>')    
    }, {
        name: 'authenticity_token',
        value: encodeURIComponent('<%= u form_authenticity_token %>')  
    }
]

请注意,在name: ...部分后面有逗号,但在value: ...部分没有。

此外,我认为encodeURIComponent()不是适当的转义/编码机制,而<%= u ...已经对URI进行了编码。你只需要确保字符串不包含未转义的单引号,所以更像这样的代码可能会起作用(假设这个JavaScript正在通过ERB进行):

value: '<%= cookies[session_key_name].gsub(/'/, "\'") %>'

适当的编码应该由插件处理,而且它几乎肯定会进行POST请求,因此URL编码甚至不适用。

此外,在JavaScript字符串中您不需要转义斜杠,它们并不特殊,所以您可以只使用'</td>'而不是'<\/td>'

我不知道jQuery-File-Upload,但修复您的逗号至少可以帮助您解决眼前的问题(并且开始处理新的更有趣的问题!)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接