2011-01-24 73 views
3

我正在使用jQuery的以下文件上传插件:jQuery的文件上传,指定FORMDATA

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

我需要特定的额外FORMDATA它说,有一个选项,但我得到一个JS错误“未捕获的SyntaxError:意外的标识符”,并没有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 %>') 
    } 
    ] 
    }); 
}); 

回答

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没有任何了解,但修复逗号至少可以帮助你解决当前问题(并解决新的和更有趣的问题!)。