2009-11-28 4 views
6

Tôi cố gắng để gỡ lỗi các lý do tại sao tôi có được ajax/bài là không làm việc trong IE 7/8Jquery AJAX không làm việc trên IE 7/8

Ở đây mã của tôi:

$.ajax({type: "POST", dataType:'html',url: "/places/set_member/add/",data: "place_id="+place_id , 
         beforeSend: function() {$("<span class='notice'>Saving...</span>").prependTo('body');}, 
         success: function(){ 
         $.ajax({type:"GET",url:url,success:function(html){$('div.place-list .ui-tabs-panel').html(html);},complete:function(){resetAddThis();}}) 
         }, 
       complete: function() { 
          $('span.notice').fadeOut(500); 
       $('span.notice').remove(); 
          }}); 

Bây giờ này hoạt động tốt trong FF Safari Win/Mac nhưng không có trong IE 7/8

Tôi đã tải xuống trình duyệt và xem các cuộc gọi, tập lệnh được gửi để gửi dữ liệu đến máy chủ và sau đó tải lại HTML hiện có thông tin cập nhật mới. Điều gì đang xảy ra là cuộc gọi đầu tiên nhận được lỗi 500 nhưng sau đó, sau khi tải lại html và hành động tương tự được thực hiện lại, nó sẽ gửi, với 200 mili giây, vì vậy nó cung cấp sự xuất hiện mà nó không được lưu. vào lần thử thứ hai.

Có điều gì đó tôi đang làm sai hoặc điều gì đó tôi cần thêm không? Đây là một vòng lặp php để chức năng này đang được áp dụng cho cùng một liên kết trên 20-30 mục trên trang.

+0

Tại sao bạn thực hiện 2 cuộc gọi ajax? Khi bạn thực hiện yêu cầu của bạn để "/ places/set_member/add /" để lưu, trả lại html mà bạn cần thay vì sau đó thực hiện một cuộc gọi ajax để có được nó. – PetersenDidIt

+0

Không phải là một ý nghĩ tồi tệ, tôi khá mới mẻ đối với tất cả những điều này, do đó, không chắc chắn làm thế nào để làm điều đó. – matthewb

Trả lời

12

IE lưu trữ tất cả cuộc gọi ajax không phải là loại POST. Tôi đã thấy rằng tốt nhất là thực hiện tất cả các cuộc gọi Ajax POST để tránh IE thực hiện việc này, ngay cả khi bạn đăng dữ liệu trống.

Hoặc bạn có thể làm như @redsqaure gợi ý dưới đây và thực hiện điều này:

$ .ajaxSetup ({cache: false})

+0

Tôi sẽ thử điều đó, vì vậy lý do tôi thấy lỗi nội bộ 500 đầu tiên, là do yêu cầu đã được gửi trước và được lưu vào bộ nhớ cache? – matthewb

+0

Cảm ơn bạn, bằng cách thực hiện 1 bài đăng và trả lại html sửa lỗi của tôi, tôi không còn thực hiện GET cho bất cứ điều gì. – matthewb

+7

chỉ cần sử dụng $ .ajaxSetup toàn cục ({cache: false}). Thao tác này sẽ tắt bộ nhớ cache cho tất cả các yêu cầu xhr.Không đăng bài khi bạn muốn nhận được ... – redsquare

2

IE lưu trữ cuộc gọi ajax. đảm bảo rằng bạn bao gồm một số ngẫu nhiên hoặc chuỗi ngẫu nhiên trong cuộc gọi của mình, chẳng hạn như &rand=[some randomly generated something] và thử lại.

0

Cuối cùng! tôi giải quyết vấn đề của tôi mà là vì "chính sách cùng nguồn gốc" và chỉ huy trong IE !: Tôi vừa mới thay đổi URL tham số từ: 'http://mysite.com/api/' để '/ api /' và nó hoạt động !!!

hy vọng nó sẽ giúp ích cho bạn!

-1

Trong hầu hết các trình duyệt, bạn có thể ghi rõ:

url: '' 

... cho một cuộc gọi ajax jQuery và điều này sẽ gửi cho chính nó.

Trong IE, bạn phải cung cấp URL.

url: '/relative/path/to/script' 
+0

Không chắc chắn lý do tại sao bạn có phiếu bầu xuống. Đây là vấn đề chính xác của tôi. Cảm ơn! – Jeremy

4

Nếu bạn không cần loại dữ liệu của mình thành HTML, bạn có thể thử điều này.

$.ajax({   
    url: 'Enter URL' 
    dataType: 'jsonp', 
    type: 'get', 
    success: function (data) { } 
}); 
0

Tôi gặp vấn đề tương tự với jquery 2.0.2. Tôi đã thay đổi jquery thành 1.8.1 và Ajax đã làm việc hoàn hảo trong IE.