2009-01-08 45 views
37

Cuộc gọi AJAX sau không thực hiện được trong IE.Yêu cầu jQuery AJAX không thành công trong IE

$.ajax({ 
    url:"{{SITE_URL}}/content/twitter.json", 
    dataType:"json", 
    error:function(xhr, status, errorThrown) { 
     alert(errorThrown+'\n'+status+'\n'+xhr.statusText); 
    }, 
    success:function(json) { 
       ...Snip... 
    } 
}); 

Các hàm lỗi trả về

Undefined 
parsererror 
OK 

Không yêu cầu được thực hiện cho các máy chủ vì vậy tôi không nghĩ rằng nó là một vấn đề với JSON.

cố định, Xem # 1.351.389

+0

Nó hoạt động trên các trình duyệt khác? –

Trả lời

49

Cố định, tôi đã thay đổi loại nội dung từ application/json; charset=utf8 thành chỉ đơn giản application/json.
Tôi ghét IE :)

Ngoài ra để tránh IE siêu bộ nhớ đệm thử điều này:

var d = new Date(); 
$.ajax({ 
     url:"{{SITE_URL}}/content/twitter.json?_="+d.getTime(), 
...Snip... 

Bằng cách đó mỗi yêu cầu là một url mới cho trình duyệt IE để có được: D

+26

Thiên Chúa, tôi vui vì tôi tìm thấy câu trả lời này. những ngày của cuộc đời tôi mà Microsoft sẽ không trả lại tôi Chỉ cần nhắc lại: Tôi cũng ghét IE, –

+13

Thưa IE, tôi ghét bạn Kính gửi @Sam, tôi yêu các bạn – Gabe

+6

Tôi ghét IE quá ... –

8

đây là một copy/paste? điều duy nhất khiến tôi luôn bỏ đi ',' trong một hàm tạo đối tượng. có nghĩa là, hầu hết các trình duyệt JS chấp nhận:

o = { a:1, b:2, c:3, }; 

nhưng IE sẽ kích hoạt tính năng này vì dấu phẩy sau mục cuối cùng. thay đổi nó thành:

o = { a:1, b:2, c:3 }; 

và nó hoạt động.

+0

Đàn ông - bạn là kẻ quái dị :) Bạn đã dành rất nhiều thời gian cho tôi. Lưu ý rằng điều này chỉ phá vỡ IE7 và dưới đây. Từ IE8, đây không phải là lỗi tăng lên. – bksi

0

Đoạn giới thiệu {{SITE_URL}} là gì. Hãy thử xem mã trong mã nguồn xem của trình duyệt. Nếu {{SITE _URL}} đoạn có một dấu gạch chéo và đó sẽ làm cho các url yêu cầu:

 
http://modomain.com//content/twitter.json 

Mà có thể leo IE ra?

+0

Vâng, bất kỳ trình duyệt nào mà tôi biết về woudl đều bị loại bỏ về điều đó ... vì vậy đây không phải là vấn đề cụ thể về IE. – SamiSalami

3

IE lưu trữ các yêu cầu AJAX thực sự tích cực (nhiều hơn Firefox). Bạn cần đặt tiêu đề Bộ nhớ cache-Kiểm soát trong phản hồi một cách thích hợp nếu điều này không phù hợp với trang web của bạn.

+1

Điểm tốt, ive được thêm? _ = 1234 vào cuối của nó và tức là bây giờ yêu cầu trang mỗi lần. Vẫn còn vấn đề tương tự mặc dù: ( – Sam

2

Một vấn đề lớn với tĩnh tạo ra JSON và IE là những "dấu phẩy" hàng đầu, cho ví dụ này ném một lỗi trong IE:

{ 
    "one":"hello", 
    "two":"hi", 
} 

Lưu ý dấu phẩy cuối cùng.

48

Đối với sự cố lưu vào bộ nhớ cache, tại sao bạn không sử dụng thông số cache: false đơn giản?

$.ajax({ 
    url: "yoururl", 
    cache: false, 
    .... 
+0

Sẽ làm, cổ vũ cho các tip – Sam

+2

Nó có vẻ khá kỳ lạ với tôi rằng điều này không được thiết lập để "sai" theo mặc định ... – Buchannon

+1

Chúc mừng, giải quyết nó cho tôi! tại sao IE không thực sự sử dụng phiên bản mà nó lưu trữ ... –

6

Trong các phiên bản mới hơn của trình duyệt Internet Explorer (IE7), cần phải viết dòng tiếp theo trước khi gọi số $.ajax, nếu không nó sẽ không bao giờ gọi hàm:

$.ajaxSetup({ cache: false }); //this line before $.ajax!!! 
$.ajax({ 
    //codes 
    //codes 
    //codes 
}); 
Các vấn đề liên quan