2011-09-02 7 views
12

Tôi đã xem qua lỗi này chỉ trên IE9:IE 9 Javascript lỗi c00c023f

SCRIPT575: Không thể hoàn thành hoạt động do lỗi c00c023f.

Các lỗi xảy ra trên dòng này: if ((a.responseXML) && (a.readyState==4)) {

tôi không thể hình dung nó ra lý do tại sao điều này xảy ra, và nó có vẻ làm việc rất tốt trong các trình duyệt khác.

và đây là mã javascript của tôi:

var a = new XMLHttpRequest(); 
a.open("GET",'/cust/ajax/getresult.php?qk=nnf87&arg1='+pzid,true); 
a.onreadystatechange = function() { 
    if ((a.responseXML) && (a.readyState==4)) { 
     var N = a.responseXML.getElementsByTagName('result') 
     sequence = N[0].firstChild.data; 
     var SEQ = sequence.split(","); 
     var num = SEQ.length; 
        var sum = 0; 
        for(var n=0;n<num;n++){sum = sum + (SEQ[n]*1);} 
     //document.getElementById("the_number_of").innerHTML = sum; 
     var date = new Date(); 
     date.setTime(date.getTime()+(2*60*60*1000)); 
     document.cookie='cpa_num='+sum+'; expires= '+date.toGMTString()+'; path=/'; 
    } 

} 

Trả lời

18

Tôi không cho rằng yêu cầu của bạn đã được hủy bỏ? Một Googling nhanh đã tìm thấy this bài đăng trên blog. Dường như một yêu cầu bị hủy bỏ trong IE9 sẽ đưa ra lỗi này khi cố đọc bất kỳ thuộc tính nào của đối tượng XMLHttpRequest.

Từ bưu điện, vấn đề cụ thể của họ với mã lỗi này có thể được nhân đôi bởi:

  • Tạo một đối tượng XMLHttpRequest
  • Gán một sự kiện onreadystatechanged handler
  • Thực hiện một yêu cầu
  • Abort theo yêu cầu trước khi phản hồi đã được xử lý

Bây giờ bạn sẽ thấy rằng trình xử lý readystatechange sẽ được gọi là với thuộc tính readystate được đặt là '4'. Bất kỳ nỗ lực nào để đọc các thuộc tính đối tượng X2H16Request sẽ không thành công.

Tác giả giảm thiểu vấn đề này bằng cách chỉ định trạng thái hủy bỏ yêu cầu khi hủy thủ công, phát hiện và quay trở lại trước khi thử đọc bất kỳ thuộc tính nào khác. Mặc dù cách tiếp cận này sẽ chỉ thực sự hoạt động nếu bạn đang thực hiện việc hủy bỏ chính mình.

Sự cố tương tự đã được ghi lại trên this WebSync Google Groups post. Đến cuối cuộc thảo luận có một ngụ ý rằng vấn đề này chỉ xảy ra

nếu bạn đã có các tiêu chuẩn và IE9 render cả hai chế độ thiết lập

Hope chỉ bạn đi đúng hướng.

+0

Xin chào @Matt, tôi đã thử các giải pháp của bạn và nó hoạt động! Cảm ơn bạn rất nhiều, tôi muốn cho bạn một phiếu bầu, nhưng tôi mới ở đây, tôi phải chờ đợi đến danh tiếng 15. Tôi phải làm việc chăm chỉ! Haha. Cảm ơn một lần nữa! – peipei

+0

@peipei Tôi rất vui vì nó đã hoạt động. Và chào mừng bạn đến với StackOverflow! – Matt

2

Bật

if ((a.responseXML) && (a.readyState==4)) 

để

if ((a.readyState==4) && (a.responseXML)) 

Như các vấn đề trật tự. có vẻ như trên IE9 nếu nhà nước không phải là 4, responseXML và reponseText mang lại lỗi này nếu được truy cập (tôi không biết tại sao ...)

+0

Đây là câu trả lời đúng. – Knu

3

Trong thói quen readyState == 4, bao gồm một thử và bắt tương tự như:

try { 
    var response=xmlHttp.responseText; 
    } 
catch(e) { 
    var response="Aborted"; 
} 

Chúng tôi nhận thấy rằng đây là độ phân giải thành công nhất để ở trên.

+0

Điều này làm việc cho trường hợp của tôi ... Rất lạ vấn đề, vui mừng rằng nó có thể được giải quyết như thế này và đánh giá phản ứng. – afreeland

1

Tôi đã gặp lỗi này trong Khung của mình. Nó chỉ hiển thị trong IE (xem hình). Tôi chỉ đơn giản là gói các phản ứng như dưới đây:

if(request.readyState == 4) 
{ 
    // get response 
    var response = request.responseText; 
} 
1

Nó xảy ra với tôi với IE9 khi tôi đọc thuộc tính "trạng thái" sớm (trước readyState là 4/DONE).