2010-12-29 40 views
6

Tôi đang sử dụng jQuery 1.4.2 và đang cố gắng thực hiện một yêu cầu AJAX đơn giản. URL mục tiêu trả về một chuỗi JSON (Tôi đã xác thực nó bằng jslint). Yêu cầu hoạt động trong Firefox và Chrome, nhưng không muốn làm việc trong IE8 và tôi không thể xác định lý do. Đây là cuộc gọi:Yêu cầu jQuery AJAX không thành công trong IE8 với thông báo 'Lỗi: Phương thức này không thể được gọi cho đến khi phương thức mở được gọi.'

jQuery.ajax({ 
url: 'http://' + domain + '/' + 'helper/echo/', 
dataType: 'json', 
success: function(data) { 
alert(data); 
}, 
beforeSend: function(request, settings) { 
alert('Beginning ' + settings.dataType + ' request: ' + settings.url); 
}, 
complete: function(request, status) { 
alert('Request complete: ' + status); 
}, 
error: function(request, status, error) { 
alert(error); 
} 
}); 

IE sẽ thực thi lệnh gọi lại trước và lỗi gọi lại. Thông báo lỗi gọi lại bằng tin nhắn:

Error: This method cannot be called until the open method has been called. 

Tiêu đề phản hồi của tôi trả về với Content-Type: text/javascript; charset=UTF-8.

Điều gì đang xảy ra với IE? Tôi đang chạy máy chủ trên máy chủ cục bộ, yêu cầu từ http://localhost:8080/psx đến http://localhost:8080/helper. Có thể IE đang chặn yêu cầu này? Tôi đã thử cài đặt Fiddler để phân tích lưu lượng truy vấn yêu cầu nhưng nó sẽ không chạy trên máy của tôi vì nó bị khóa. Firebug cho phép tôi, nhưng mọi thứ có vẻ tốt ở đó.

Cảm ơn bạn đã trợ giúp !!!

+0

Thử đặt 'async: false' và thử lại. –

+0

Điều đó không có tác dụng, thật không may. Tôi cũng nên đề cập đến tình trạng gọi lại lỗi là null. – checker

Trả lời

14

Được rồi, đây là bản sửa lỗi! Yêu cầu đang sử dụng window.XMLHttpRequest(), không hoạt động đúng trong IE8 vì một số lý do. jQuery không quay trở lại window.ActiveXObject("Microsoft.XMLHTTP") như mong muốn.

Thêm phần này vào kịch bản của bạn ở đâu đó trước khi gọi AJAX của bạn (chỉ xác nhận trong IE8, không khác của IE):

jQuery.ajaxSetup({ 
      xhr: function() { 
        //return new window.XMLHttpRequest(); 
        try{ 
         if(window.ActiveXObject) 
          return new window.ActiveXObject("Microsoft.XMLHTTP"); 
        } catch(e) { } 

        return new window.XMLHttpRequest(); 
       } 
     }); 

Đây là cách tôi đã đến giải pháp:

  1. cập nhật để jQuery 1.4 .4 trong trường hợp vấn đề là một lỗi đã được sửa.
  2. Bước qua trình gỡ lỗi Firebug và trình gỡ lỗi DevTools cho đến khi kết quả dường như khác biệt đáng kể.
  3. Trên dòng 5899, hàm ajax() tạo đối tượng XmlHttpRequest với hàm xhr(). Trong Firefox, nó đã trở lại dữ liệu tốt. Trong IE, đây là trở về với tất cả các lĩnh vực là Error: This method cannot be called until the open method has been called.
  4. tôi đã phân tích chức năng này trên dòng 5749, return new window.XMLHttpRequest();
  5. Tôi googled và đã xem qua page này có cùng một vấn đề và đề nghị các giải pháp mà làm việc cho tôi.
  6. Official jQuery ticket:
Các vấn đề liên quan