2009-07-02 4 views
15

Для одного из наших запросов ajax (с ответом .json) некоторые из наших клиентов жаловались, что они видят приглашение «Загрузить файл», запрашивая у пользователя загрузку ответа .json , Я сбив с толку, потому что, учитывая, что это ответ xhr, этого никогда не должно произойти. Кто-нибудь видел это?json xhr response открывает всплывающее окно загрузки файла

Благодаря

+0

Почему вы добавляете .json в качестве расширений файлов? Я думаю, вы не можете этого сделать, если вы не установите браузер для выполнения конкретной задачи .json-файла (в FF перейдите к параметрам) – nightingale2k1

ответ

11

попробуйте указать тип MIME из «текст/простой» в ответ. или просто отпустите расширение «.json» из URL-адреса (например, попробуйте .txt или .js).

+0

и убедитесь, что перед тем, как указать это, вы не устанавливаете заголовки где-либо еще в своем коде (т.е. , указывая тип mime как нечто иное, чем text/plain). – jellyfishtree

+0

Этот ответ предполагает, что вы контролируете ответ. Как насчет вызова стороннего WS, который отвечает JSON, с типом контента, установленным, запрещает, json? – phtrivier

+0

Да, меняет ContentType на text/html (из приложения/json). Я написал сообщение в блоге об этом с более подробной информацией: http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/ – Andreas

-3

Оставьте .json и задайте тип содержимого как text/html. IE не знает, какой тип файла вы его отправляете, поэтому он предлагает загрузить. Он знает, что делать с текстом/html :)

+1

Нет. Не показывайте json как text/html. http://jibbering.com/blog/?p=514 – Cheeso

3

Не уверен, что вы нашли решение, но у меня была аналогичная проблема, когда IE пытался загрузить любые ответы JS. Чтобы исправить это, я должен был убедиться, что format.html появляется над format.js в блоке ответа:

def index 

    # ... 

    respond_to do |format| 
    # html must be above js, otherwise IE will try to download the JS 
    format.html 
    format.js 
    end 
end 

Надеется, что это помогает.

+0

Это решение сработало для меня. Не знаю, почему (другие браузеры отлично работали). –

+0

IE Accept header: 'Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */*' Firefox Accept header: 'Accept: text/html, application /xhtml+xml,application/xml;q=0.9, */*; q = 0,8' Не знаете, что еще означает q =, но я уверен, что это имеет какое-то отношение к тому, сколько он хочет содержимого этого конкретного типа , –

16

Для людей, которые используют ASP MVC и имеют те же проблемы с IE, используйте это при возвращении вашего ответа:

return Json(result, "text/plain"); 

Edit: стандартный типа: «применение/JSON», но не работает с IE. использование text/html опасно.

+0

Лучше ответить, чем @jrharshath, потому что текст/обыск не является технически правильным. Это грубый взлом для старых версий IE. –

1

Я использую загрузчик файлов QQ ajax, и я обнаружил, что мне нужно установить тип контента «text/json», чтобы он работал правильно.

+0

Я пробовал это, но это не сработало. IE7 пытается загрузить файл php, указанный в качестве конечной точки. –