Загрузка файла jQuery с указанием FormData - PullRequest
3 голосов
/ 25 января 2011

Я работаю, чтобы использовать следующий плагин jQuery File Upload:

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

Мне нужны конкретные дополнительные данные форм, для которых указано, что есть опция, но я получаю ошибку JS "Uncaught 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 %>')
     }
   ]
    });
});

1 Ответ

7 голосов
/ 25 января 2011

У вас нет запятых в нужных местах в вашем 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, но исправление запятых должно, по крайней мере, помочь вам справиться с вашей непосредственной проблемой (и к новым и более интересным проблемам!).

...