7

Code Igniter phiên bản '2.0.3' Jquery 1,7 Lịch sử Jquery PluginJquery.get() không hoạt động trong IE8/9. Sẽ không tải những trang lưu trữ 304 không thay đổi về

Hi guys,

Tôi có một ứng dụng CodeIgniter mà tôi đã xây dựng trong một ajax thời trang. Tôi có một chức năng như sau:

$(document).on('click','.ajax_link',function(e){ 
    //Stop the normal href action 
    e.preventDefault(); 

    //Grab the destination URL 
    var new_url = $(this).attr('href') 

    //Grab the content via ajax and pass it to the history change function 
    $.get(base_url+new_url,function(data){ 
     History.pushState({ 
      content:data.content, 
      url:data.url 
     }, data.title, data.url); 
     //Refresh some site variables 
     refresh(); 
    },'json'); 
}); 

Tất cả nó có phải nó bắt nhấp chuột vào các yếu tố neo với một lớp ajax_link và gửi đáp ứng với một chức năng để xử lý các vị trí của dữ liệu đáp ứng vào trang.

Tính năng này hoạt động trong Chrome và FF. Tôi nhấp vào liên kết, jQuery thực hiện yêu cầu get, tôi lấy lại một đối tượng JSON và hàm history.pushState() của tôi đưa một số dữ liệu json vào trang của tôi.

Sự cố tôi gặp phải trong IE8. Về cơ bản những gì đang xảy ra là khi tôi lần đầu tiên mở ứng dụng, các liên kết hoạt động nhưng chúng chỉ hoạt động một lần. Lần thứ hai tôi bấm một liên kết nó:

  • Liệu các ajax GET
  • Nhận một phản ứng của 304 (Không thay đổi)
  • Không gọi hàm callback jQuery.get() và do đó dừng lại chết.

Nếu tôi xóa bộ nhớ cache hoạt động lại. Giả sử của tôi là IE đang thực hiện yêu cầu nhận, nhưng sau đó nó thấy rằng nó đã được yêu cầu chính xác cùng một tệp trong quá khứ ... và vì vậy dừng quá trình hoàn toàn.

Có ai biết giải pháp cho điều này không? Tôi đã có một cái nhìn cho đề cập đến 304 lỗi và lỗi với ajax và bộ nhớ đệm trong IE nhưng đã không tìm thấy một vấn đề giống hệt với tôi chỉ được nêu ra.

Bất kỳ giúp nhiều đánh giá cao

(Tested trên Windows Virtual Machine IE8, và IE 8 Mode trong Internet Explorer 9)

Giải Quyết

Chỉ cần thêm đoạn mã sau vào tài liệu của tôi chức năng .ready và vấn đề biến mất.

$.ajaxSetup ({cache: false}); 

Trả lời

5

Thay đổi dòng này:

var new_url = $(this).attr('href') 

Để này:

var new_url = $(this).attr('href') + '?' + Math.random(); 

này được gọi là "CacheBuster" và hiệu quả tạo ra một url tương tự như:

"website.com/page.html?1241233" 

Đó số ngẫu nhiên sẽ khác nhau đối với mỗi nhấp chuột của ".ajax_link" để IE sẽ nghĩ rằng trang mới của nó và nhận được nó đúng cách.

+0

Cảm ơn câu trả lời của bạn, xin lỗi đã mất quá nhiều thời gian để chấp nhận nó. Đây thực sự là giải pháp tôi cần. –

+0

cũng xem: http://stackoverflow.com/questions/1013637/unexpected-caching-of-ajax-results-in-ie8 – Costa

0

Chúng tôi gặp sự cố với IE (và Opera) không thích "application/json", nơi chúng tôi phải trả lời là "text/plain".

+0

cảm ơn đề xuất của bạn. Tôi đã cố gắng giải quyết vấn đề bằng cách đặt các thông tin sau vào hàm document.ready của tôi: $ .ajaxSetup ({cache: false}); –

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