2014-04-16 3 views
2

Я отправляю некоторые данные на сервер через Backbone.js, и сервер отправляет csv-файл в качестве ответа. Поскольку Backbone.js обрабатывает только формат json, какой-то орган скажет мне, как обрабатывать этот случай, так что я смогу скачать csv-файл изящно.Обработка ответа csv в backbonejs

object = {}; 
    object.c1 = formObj.c1 
    hash = { 
    success: function(model, response, options) { 

    }, 
    error: function(model, response, options) { 
     return console.log(response); 
    } 
    }; 
    model = new P.models.mine(object); 
    model.doSomething(object, hash); 

Он всегда приходит в error часть.

ответ

1

Идеальный способ справиться с этим состоит в том, чтобы изменить код задней части, чтобы вернуть JSON, или создать другой маршрут, который возвращает JSON. Поскольку вы задаете этот вопрос, я предполагаю, что это не вариант для вас.

В основном вы будете иметь, чтобы разобрать CSV на стороне клиента:

https://stackoverflow.com/a/1293163/944006 - Должен вам начать.

Если вы запрашиваете загрузку csv-файла, тогда просто указывая браузер в этом месте, вы должны попросить пользователя скачать. Вы не можете подсказать загрузки файла через AJAX (по уважительной причине), но есть способы цыпочках обойти это ограничение:

https://stackoverflow.com/a/9970672/944006

+0

Мой CSV может быть огромным, так что на стороне клиента разборе это не вариант. Благодарю. – Trying

+0

Если вы не можете разобрать csv в клиенте, то ваш единственный вариант - изменить сервер для доставки json –

+0

Как @StephenThomas сказал, если вы не можете его разобрать, вам нужно, чтобы json сделал с ним что-нибудь динамичное. Если вы хотите, чтобы файл csv был загружен, укажите браузер на созданном csv, и он попросит пользователя загрузить файл (при условии правильности установки заголовков). –

0

Вы также можете использовать обычный Javascript, а не Backbone.js. Поверьте мне, это лучший способ.

Вот код:

var xhr = new XMLHttpRequest(); 
xhr.open('POST', Urls.download, true); 
xhr.responseType = 'blob'; 
xhr.setRequestHeader("Authorization", "Bearer " + access_token); 
xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8'); 
xhr.onload = function (e) { 
    if (this.status == 200) { 
    var blob = new Blob([this.response], { type: 'application/vnd.ms-excel' }); 
    var downloadUrl = URL.createObjectURL(blob); 
    var a = document.createElement("a"); 
    a.id = "a" + new Date().getTime(); 
    a.setAttribute("data-bypass", ""); 
    a.href = downloadUrl; 
    a.download = "list_" + new Date().getTime() + ".xlsx"; 
    document.body.appendChild(a); 
    a.click(); 
    } else { 
    alert('Unable to download excel.') 
    } 
}; 
xhr.send(JSON.stringify(this.obj)); 
Смежные вопросы