2013-02-17 3 views
2

Я использую fineuploader для загрузки изображений в API-интерфейс ASP.NET 4.5 Web API. Контроллер попадает в состояние ОК, и изображение загружается. Я получаю ответ 200 от контроллера API. После успешной загрузки я показываю миниатюру, и имя файла в местоположении в Amazon S3 должно возвращаться в ответ JSON. Когда я пытаюсь это сделать в Chrome или IE10, он отлично работает. Когда я пытаюсь это сделать в Firefox, возвращаемый responseJson - это пустой объект, который отображается как сбой. Я использую jQuery 1.8.2 и fineuploader 3.2. Я фактически получаю undefined, отображаемый на экране, потому что responseJson.message не определен. Вот код JS:fineuploader json response не возвращается в firefox

(function ($) { 
    $('#file-uploader').fineUploader({ 
    multiple: false, 
    request: { 
     endpoint: '/api/post-logo', 
     forceMultipart: false 
    }, 
    // other setup options removed for brevity 
    }).on('complete', function (event, id, fileName, responseJson) { 
    if (responseJson.success) { 
     // for now, to illustrate the issue 
     alert(responseJson.savefilename); 
    } else { 
     $('#file-uploader').after("<span class='field-validation-error'>" + responseJson.message + "</span>"); 
    } 
    }); 
})(jQuery); 

Ответ, который возвращается есть application/json. Что мне нужно сделать, чтобы нормально работать в Firefox?

ответ

3

Разница между FF и Chrome заключается в отправке заголовка Accept. Просто используйте Firebug и хромированной панели инструментов разработчика для сравнения результатов между 2 браузерами:

FF:

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 

Chrome:

Accept: */* 

Так как вы можете видеть FF не посылает правильный Accept заголовок и механизм согласования содержимого веб-API просто возвращается к text/xml (потому что это то, что запросил клиент).

К счастью, плагин позволяет переопределить заголовки запроса, используя customHeader свойства и заставить его ожидаемого типа (application/json в вашем случае):

request: { 
    endpoint: '/api/post-logo', 
    forceMultipart: false, 
    customHeaders: { Accept: 'application/json' } 
}, 
+0

Genius как всегда - веселит Дарина, который установил его – levelnis

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