2013-05-02 30 views
8

Tôi đang gặp khó khăn để làm cho tập lệnh này hoạt động. Về cơ bản, đó là cuộc gọi ajax đơn giản để truy xuất dữ liệu từ một php trả về mã JSON.jQuery và JSON so với IE - SCRIPT5007: Không thể lấy giá trị của thuộc tính

function refreshWindows(){ 
if(AjaxPull && AjaxPull.readystate != 4){ 
    AjaxPull.abort(); 
} 
AjaxPull = $.ajax({ 
    type: 'POST', 
    url: $path, 
    data: { 
     ajax: true, 
     mode: 'update', 
     to: Math.round(currentDate.getTime()/1000), 
     from: Math.round(previousDate.getTime()/1000) 
    }, 
    dataType: "json", 
    success: function (data) { 
     alert(data); //that's for debug 
     $replies = data.Updates; 
     $.each($replies ,function(group,value) { 
      if (value!=''){ 
       $("#group"+group+" .content").append(value); 
       $("#group"+group+" .content").stop().animate({ scrollTop: $("#group"+group+" .content")[0].scrollHeight }, 800); 
       if (!$("#group"+group+" .Window").is(':visible')) { 
        $("#group"+group+" .BottomBox").fadeTo('fast', 0.5).fadeTo('fast', 1.0); 
       } 
      } 
     }); 
     previousDate = currentDate; 
     currentDate = new Date(); 
     timeController.push(setTimeout(function(){refreshChatWindows();}, 500)); 
    } 
}); 

}

Các lỗi tôi nhận được trong Internet Explorer là:

SCRIPT5007: Không thể nhận được giá trị của tài sản 'cập nhật': đối tượng là null hoặc không xác định

Mọi thứ hoạt động tốt trong Firefox và Google Chrome.

Ban đầu mã của tôi được tạo bằng cách sử dụng .get nhưng ai đó đã đề xuất chuyển sang .ajax - tốt, điều đó không giúp ích gì. Tôi đã thử sử dụng .done (chức năng (dữ liệu) { nhưng cũng không hoạt động. Tôi cũng đã thử gửi tất cả dữ liệu trong URL của mình đối diện với tài sản , nó hoạt động tốt trong FF, nhưng IE vẫn xuất hiện Cuối cùng tôi đã thử thêm các tiêu đề khác nhau vào PHP, ví dụ như tiêu đề ('Content-Type: application/json'); nhưng nó không thay đổi gì cả. Tôi hết ý tưởng/giải pháp có thể tôi có thể Trong IE, tôi đã đi đến Công cụ dành cho nhà phát triển, tab mạng và cố gắng xem liệu mọi thứ có hoạt động hay không - có, yêu cầu đang được gửi chính xác với tất cả dữ liệu và phản hồi mà tôi đã gửi đến. nhận được đúng JSON, giống như trong Firefox:

{"Updates":{"1":"","2":"","3":"","5":"","6":"","7":"","8":""},"time":{"from":"1367489761","to":"1367489761"}} 

điều này khiến tôi thực sự bối rối, vì tôi đã nghĩ rằng lỗi không xác định có thể xảy ra chỉ vì một cái gì đó không được gửi lại trong IE vì bất kỳ lý do gì, nhưng rõ ràng: không phải như vậy. Tôi lấy lại JSON của mình. Chỉ có IE cho một số lý do không rõ vẫn nghĩ rằng dữ liệu là không xác định.

+0

Sẽ giúp ích nếu bạn chỉ định (các) phiên bản IE nào bạn đang thử nghiệm. – Spudley

+0

Đó là IE 9 và 10. – MarcinWolny

+0

bạn có một 'alert()' trong đó; những gì nó cho bạn thấy? (và bằng cách này, sẽ tốt hơn nếu sử dụng 'console.log()'). – Spudley

Trả lời

4

Ok, cuối cùng tôi đã tìm được giải pháp. Về cơ bản:

  • Xóa mọi tiêu đề được gửi bởi tập lệnh PHP. Đặc biệt: Tiêu đề loại nội dung. (May mắn - có vẻ như phiên vẫn có thể được sử dụng)
  • Sử dụng }).done(function (data) { thay vì success: function (data) {

và đó là tất cả. Đột nhiên nó bắt đầu hoạt động. Nó rất lạ. Có vẻ như chiến thuật shotgun (các bit thay đổi ngẫu nhiên mã cho đến khi nó hoạt động) thực sự là một cách giải quyết vấn đề hợp lệ. hehehe

0

Tôi có một cuộc gọi tương tự json trả về dữ liệu mà trông như thế này:

{ "GetTombstoneDataRestResult": { "AlphaSort": "Arai Junichi", "Phân loại": "Một & D Thiết kế Object" .. .etc

Nói cách khác, rất giống dữ liệu json của bạn. Để tham chiếu nó trong jQuery, tôi sử dụng tên gọi lại.

 $.ajax({ 
    type: "GET", 
    dataType: "jsonp", 
    url: url, 
    success: function (result) { 

    $('#screenshot').append('<p><strong>Title: ' + 
    result.GetTombstoneDataRestResult.Title + '</strong><br />Year: ' + 
    result.GetTombstoneDataRestResult.Dated + '<br />Artist: ' + 
    result.GetTombstoneDataRestResult.DisplayName + '</p>'); 

    } 
    }); 

Hình như bạn muốn thử điều này quá:

var replies = data; 
$.each(replies.Updates ,function(group,value) { 
+0

Xin lưu ý rằng '$ replies = data.Updates;' đã là nơi mã xuống. 'dữ liệu' là không xác định. Vì vậy, nó không phải là một vấn đề với mỗi vòng lặp hoặc tham chiếu chính xác dữ liệu json, như về cơ bản trong IE không có dữ liệu để tham khảo (nó hoạt động tốt trong FF như tôi đã nói). – MarcinWolny

0

Bạn có một nhân vật được gọi là &#8203; trong JSON của bạn.
Xem mô tả ở đây: What's HTML character code 8203?

Đó là ngay trước khi thư ruột kết của bạn ở đây "time"​:

Bạn có thể làm sạch đầu ra của bạn và kích hoạt các JSON và thử lại không?

+0

Tôi nghĩ rằng đó chỉ là vấn đề với sao chép và dán. Mã JSON được xuất ra trong PHP bằng cách sử dụng 'json_encode ($ output);' where '$ output' là một mảng. – MarcinWolny

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