Какой тип MIME вернуть? - PullRequest
3 голосов
/ 10 мая 2011

У меня есть HTML-страница с кодом JavaScript, который отправляет запрос AJAX.Запрос обрабатывается моим сервлетом.Я подумал, что «лучше» и «правильнее» возвращать данные как MIME-тип «application / json» из сервлета (тип содержимого ответа).Тем не менее, это сводит MSIE с ума - это означает, что браузер, похоже, не способен отображать / обрабатывать этот тип MIME (Chrome / FF просто отлично).Когда я явно не указываю тип - он отлично работает во всех браузерах.Реально ли то, что тип MIME не должен возвращаться из сервлета для запросов AJAX?

Обновление: моя сторона сервера реализована на Java, а тип MIME определяется следующей строкой:

response.setContentType("application/json");

ответом является следующий текст (только пример):

{ "status" : "DONE", "progress" : 100, "url" : "/7909118672283641787.docx" , "totalBytes" : 17696 } 

Update2: фрагмент, сделанный из моего клиентского кода (обычный javascript,нет библиотек)

function display_progress(http) {
    if (http.readyState == 4) {
        var again = false;

        if (http.status != 200) {
            document.getElementById('progress_bar').innerHTML = "Wrong response status received: " + http.status + "! Fix the server-side code.";
        } else {
            try {
                var resp = eval('(' + http.responseText + ')');             
                var status = resp['status'];

                if (status == 'DOING') {
                    document.getElementById('progress_bar').innerHTML = "Uploaded: " + resp['progress'] + "%";
                    again = true;
                } else if (status == 'DONE'){
                    document.getElementById('progress_bar').innerHTML = 
                        "Uploaded 100% (" + resp['totalBytes'] + " bytes)! Your file is <a href=\"" + resp['url'] + "\"/>" + "here" + "</a>";
                } else if (status == 'ERROR') {
                    document.getElementById('progress_bar').innerHTML = "Error while uploading!";
                } else {
                    document.getElementById('progress_bar').innerHTML = "Unexpected state: " + status + "! Fix the server-side code.";
                }
            } catch (ex) {
                document.getElementById('progress_bar').innerHTML = "Wrong response received: " + resp + "! Fix the server-side code.";
            }
        }

        if (again) {
            setTimeout("update_progress()", 500);
        }
    }

Ответы [ 3 ]

3 голосов
/ 10 мая 2011

Верните его как необработанный текст, затем используйте JSON.parse() для преобразования в JSON, который можно использовать.

JSON не является текстом, поэтому Firefox не знает, ЧТО с ним делать.Следовательно, вы должны в основном служить ему как нечто, что оно знает.

0 голосов
/ 10 мая 2011

Как объяснено здесь: http://www.entwicklungsgedanken.de/2008/06/06/problems-with-internet-explorer-and-applicationjson/ text/javascript - правильный обходной путь.

0 голосов
/ 10 мая 2011

Нет, это не так .... вы можете установить MIME-типы для запросов AJAX ... в случае, если вы не устанавливаете их ... они принимают значение по умолчанию .... что, случается, .... «текст / обычный». Так что я думаю, что по умолчанию работает нормально для вас .... Более распространенным типом ответа является "text / html". Все зависит от кода, который вы будете использовать для обработки ответа от сервлета ... проблема может заключаться в этой части кода ....

...