2009-07-02 30 views
15

Đối với một trong các yêu cầu ajax của chúng tôi (với phản hồi .json) một số khách hàng của chúng tôi đã phàn nàn rằng họ đang nhìn thấy lời nhắc "Tải xuống tệp" yêu cầu người dùng tải xuống phản hồi .json . Tôi bối rối bởi vì xem xét rằng đây là một phản ứng xhr, điều này sẽ không bao giờ xảy ra. Có ai nhìn thấy điều này không?Phản hồi json xhr sẽ mở ra cửa sổ tải xuống tệp tải xuống

Cảm ơn

+0

lý do bạn thêm .json làm phần mở rộng tệp? tôi nghĩ bạn không thể làm điều đó trừ khi bạn đặt trình duyệt làm điều cụ thể cho tệp .json (trong FF đi tới tùy chọn) – nightingale2k1

Trả lời

11

thử xác định một kiểu MIME của "text/plain" trong phản ứng. hoặc chỉ cần thả phần mở rộng ".json" khỏi url (ví dụ: hãy thử .txt hoặc .js)

+0

và đảm bảo trước khi chỉ định điều này là bạn không đặt tiêu đề ở bất kỳ nơi nào khác trong mã của bạn (ví dụ: , chỉ định loại mime là một cái gì đó khác với văn bản/đồng bằng). – jellyfishtree

+0

Câu trả lời này giả định rằng bạn có quyền kiểm soát phản hồi. Làm thế nào về việc gọi một WS của bên thứ ba phản hồi với JSON, với một kiểu nội dung được đặt thành, các lệnh cấm của thần, json? – phtrivier

+0

Có, việc thay đổi ContentType thành văn bản/html (từ ứng dụng/json) đã làm việc cho tôi. Tôi đã viết một bài đăng blog về nó với một số chi tiết khác: http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/ – Andreas

-3

Thả .json và đặt loại nội dung là văn bản/html. IE không biết loại tệp bạn đang gửi, vì vậy nó cung cấp để tải xuống. Nó biết phải làm gì với văn bản/html :)

+1

No. Không phục vụ json dưới dạng text/html. http://jibbering.com/blog/?p=514 – Cheeso

3

Không chắc chắn nếu bạn tìm thấy một giải pháp, nhưng tôi đã có một vấn đề tương tự như IE đã cố gắng để tải về bất kỳ phản ứng JS. Để khắc phục, tôi phải đảm bảo rằng format.html xuất hiện ở trên định dạng.js trong khối phản hồi:

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 

Hy vọng điều này sẽ hữu ích.

+0

Giải pháp này phù hợp với tôi. Không biết tại sao (các trình duyệt khác hoạt động tốt). –

+0

Tiêu đề chấp nhận IE: 'Chấp nhận: hình ảnh/gif, hình ảnh/jpeg, hình ảnh/pjpeg, hình ảnh/pjpeg, ứng dụng/x-shockwave-flash, */*' Firefox Chấp nhận tiêu đề: 'Accept: text/html, application /xhtml+xml,application/xml;q=0.9, */*; q = 0.8' Không chắc chắn q = có nghĩa là gì, nhưng tôi đặt cược nó có cái gì đó để làm với bao nhiêu nó muốn nội dung của loại hình cụ thể . –

16

Đối với những người đang sử dụng ASP MVC và có cùng một vấn đề với IE, sử dụng điều này khi trở về trả lời của bạn:

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

Edit: loại tiêu chuẩn là: "application/json", nhưng không hoạt động với IE. sử dụng text/html là nguy hiểm.

+0

Câu trả lời hay hơn @jrharshath, vì văn bản/đồng bằng không chính xác về mặt kỹ thuật. Đó là một hack tổng thể cho các phiên bản cũ của IE. –

1

Tôi đang sử dụng trình tải lên tệp ajax QQ và tôi thấy rằng tôi cần thiết đặt loại nội dung thành "văn bản/json" để hoạt động bình thường.

+0

Tôi đã thử điều này nhưng nó không hiệu quả với tôi. IE7 cố tải xuống tệp php được chỉ định làm điểm cuối. –

Các vấn đề liên quan