2012-02-16 19 views
11

Tôi có một kịch bản yêu cầu ajax đến một máy chủ từ xa, trả về một phản hồi văn bản thuần túy. Nó hoạt động tốt trong tất cả các trình duyệt ngoại trừ IE8 (shocker).Máy chủ từ xa Jquery ajax() không hoạt động trong IE8

Dưới đây là các mã:

$.ajax({ 
    url: 'abc.com/?somerequest=somevalue', 
    cache: false, 
    type: 'POST', 
    data:{ 
    sub: 'uploadprogress', 
    uploadid: this.uploadId 
    }, 
    dataType: 'html', 
    success: this.uploadProgressResp, 
    error: this.errorResp 
}); 

Trong IE8, nó sẽ trả về một lỗi "Không Giao thông vận tải". Tôi cho rằng đó là vì IE8 không cho phép yêu cầu miền chéo?

LƯU Ý: Tôi không viết API cho máy chủ từ xa. Nếu tôi đã làm, tôi sẽ trả về phản hồi JSON thay vì trả lời bằng văn bản thuần túy. Vì vậy, có, dataType được cho là HTML chứ không phải JSON.

rant: Tôi ghét IE và muốn nó sẽ biến mất khỏi mặt đất

+0

Các bạn đã thử JSONP? –

+1

có thể trùng lặp của [$ .ajax gọi làm việc tốt trong IE8 và không hoạt động trong trình duyệt firefox và chrome] (http: // stackoverflow.com/questions/8698682/ajax-call-working-fine-in-ie8-and-doesnt-work-in-firefox-and-chrome-trình duyệt) –

+0

@Diodeus Tôi đã thử JSONP, nhưng nó vẫn mang lại lỗi trong IE8. Câu trả lời là một văn bản chứ không phải JSON, vì vậy tôi không nghĩ nó thích hợp. – peter

Trả lời

3
+0

Thật không may, tôi không thể thay đổi mã hoặc phản hồi từ máy chủ từ xa – peter

+0

nếu bạn không thể thay đổi phản hồi từ máy chủ từ xa, hãy làm theo [hướng dẫn chi tiết thứ hai.] (Http://cmsnsoftware.blogspot.com/2012/02/ how-to-use-cross-domain-ajax-request.html # 1) rõ ràng là đề cập đến cách thiết lập proxy của riêng bạn trong máy chủ (không phải máy chủ từ xa) –

+0

Thiết lập proxy trên máy chủ của riêng bạn quá chậm . bạn phải đi qua máy chủ của riêng bạn, yêu cầu từ máy chủ từ xa, chờ phản hồi, sau đó xuất phản hồi của riêng bạn. Yêu cầu mất gấp đôi thời gian. – peter

7

Hãy thử thêm một nơi nào đó trước khi cuộc gọi ajax-nhất chỗ cho nó là trước khi bất kỳ JavaScript khác thực hiện!

jQuery.support.cors = true; 

Nếu không, lỗi "Không có phương tiện" sẽ được Internet Explorer ném. Bản thân thông báo lỗi khá khó hiểu, nhưng theo yêu cầu ajax tên miền chéo mặc định bị chặn bởi IE, nhưng dường như không phải như vậy bởi các trình duyệt khác - hoặc ít nhất, Chrome và Firefox sẽ hoạt động với hiệu ứng đó.

Tôi đã chia sẻ nỗi đau của bạn về vấn đề này, trước đây. Khá tự tin rằng nó sẽ sắp xếp vấn đề của bạn.

+6

Sau khi thêm dòng mã đó, bây giờ tôi nhận được lỗi "Truy cập bị từ chối" – peter

+2

Điều đó làm tôi ngạc nhiên - tôi gặp sự cố "Không Giao thông" và giải quyết ngay lập tức bằng mã đó. Tôi đã đào sâu hơn một chút và bắt gặp vấn đề này: http://stackoverflow.com/questions/5087549/access-denied-to-jquery-script-on-ie - bất kỳ trợ giúp nào? Xin lỗi đề xuất của tôi đã không hoạt động cho bạn: \ – SpaceBison

+0

Tôi gặp sự cố này, Đã hoạt động trong Chrome nhưng không đưa ra lỗi giao thông trong IE, giải pháp của SpaceBison đã giải quyết được sự cố của tôi. Tôi đã phải thực hiện cuộc gọi ngay trên cuộc gọi ajax. Tôi 1 đã cố gắng thêm nó trong $ (tài liệu). Đã nhưng nó đã không làm việc và sau đó tôi thêm nó trực tiếp ở phía trước của cuộc gọi ajax và nó làm việc. Thanks SpaceBison – Lismore

0

Tôi biết đây là câu hỏi rất cũ, nhưng buồn thay người vẫn còn sử dụng IE8/9 và đôi khi chúng ta phải ủng hộ họ:/

Đây là giải pháp tốt nhất mà tôi đã có thể để tìm sự cố này:

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

Chỉ bao gồm các mục sau đây cript trong html của bạn và đó là nó, bạn không cần phải thay đổi bất cứ điều gì trong yêu cầu jQuery của bạn

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>

Hạn chế:

  • IE6/7 không được hỗ trợ, chỉ IE8 và IE9
  • Phiên bản jQuery tối thiểu là 1.5
  • Khi sử dụng phương thức POST trong IE8/9, Content-Type tiêu đề luôn là đặt thành text/plain
  • trang web hiện tại và yêu cầu URL cả phải được sử dụng cùng một giao thức (HTTP-> HTTPS hoặc HTTPS-> HTTP yêu cầu sẽ không hoạt động)
Các vấn đề liên quan