2015-10-21 2 views
1

Я использую remotipart для загрузки файла с помощью ajax в моем приложении rails. Я использую jQuery-ujs Ajax «глобальные» события ajax:success и ajax:error в своем javascript для запуска кода при успешном завершении или неудаче. Проблема в том, что обратный вызов ошибки всегда срабатывает и никогда не бывает успеха.Загрузка файла Remotipart, дающая NaN в качестве кода ответа

Я вижу на вкладке сети инструментов разработчика, что запрос возвращает статус 200 OK.

Это моя форма, в которой запускается удаленная загрузка.

= form_tag({ action: 'import' }, html: { multipart: true }, class: 'csv_import_form', remote: true, data: { type: :json }) do 

Мой контроллер обрабатывает запрос, как JSON и оказывает ответ JSon:

def import 
    render json: { some: 'sample json' } 
end 

и это то, что тело ответа выглядит как видно инструменты разработчика:

<textarea data-type="application/json" data-status="200" data-statusText="OK">{"some":"sample json"}</textarea> 

Remotipart завершает ответ в текстовой области. Обратите внимание на то, что она включает data-status="200"

Вот это JavaScript:

$(function() { 

    $(document).on("ajax:success", ".csv_import_form", function(event, data, status, xhr) { 

    // does not get here 

    }).on("ajax:error", ".csv_import_form", function(event, xhr, status, error) { 
     console.log("status code: " + xhr.status); 
     console.log("json: " + xhr.responseText); 
     console.log("status text: " + xhr.statusText); 
     console.log("status: " + status); 
     console.log("error: " + error); 
    }); 
}); 

Это то, что я вижу выход в консоли:

status code: NaN 
json: {"some":"sample json"} 
status text: OK 
status: OK 
error: OK 

Кажется, фактический ответ Textarea не должным образом проанализирован , Несмотря на то, что он имеет статус данных = «200», он анализируется как NaN и, таким образом, вызывает обратный вызов ошибки.

Кто-нибудь видел это?

Использование:

rails 4.0.13 
remotipart 1.2.1 
jquery 1.7.2 

Благодарности

+0

Вы пробовали обернуть все в функции документа (готово)? – AdamJeffers

+0

Да, должен был упомянуть, я настраиваю эти обработчики событий внутри документа (готовой) функции. Спасибо за предложение! Отредактировал исходный вопрос, чтобы показать это. – jmflannery

ответ

1

Оказалось, что даже если я модернизировал remotipart gem до последней версии (1.2.1 в это время), включенные JavaScript файлы получил устареть.

Чтобы исправить я удалил:

app/assets/javascripts/jquery.remotipart.js 

и

app/assets/javascripts/jquery.iframe-transport.js 

и вместо этого добавил

//= require jquery.remotipart 

application.js к моему файлу, а затем он работал, как ожидалось.

Смежные вопросы