2010-06-23 46 views
16

Tôi có chức năng jquery để thực hiện cuộc gọi ajax đến phương thức webservice trên máy chủ web, phương thức trả về bảng html có dữ liệu. Tôi đang sử dụng .html() để hiển thị các giá trị trả về trên div. Này hoạt động trong Firefox, Chrome, Safari, nhưng không hoạt động trên IE8jquery .html() không hoạt động trên ie8

$.ajax({ 
    type: "POST", 
    url: "./../WebAjaxCalls.asmx/GetProductInstruction", 
    data: "{'ProductID':'" + $("#txtProductID").val() + "'}", 
    success: function(data) { 
     if (data.d[0] == "true") { 
      **$("#dvProudctInstruction").html(data.d[1]);** 
     } 
    }, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    error: function(e, textStatus, errorThrown) { 
     bReturn = false; 
    } 
}); 

Dòng $ ("# dvProudctInstruction") html (data.d [1]). hoạt động trên tất cả các trình duyệt ngoại trừ IE8.

Bất kỳ trợ giúp nào về điều này sẽ được nhiều người đánh giá cao.

Trả lời

0

Bạn đã thử đặt data.d[1] thành một biến và sau đó thêm nó?

Ví dụ:

if (data.d[0] == "true") { 
    var results = data.d[1]; 
    $("#dvProudctInstruction").html(results); 
} 
0

Dù .html() của nó không hoạt động hoặc một cái gì đó nó khác, kiểm tra xem nó đầu tiên. Đặt một cảnh báo và xem bạn có nhận được html đúng hay không.

alert(data.d[1]); 
$("#dvProudctInstruction").html(data.d[1]); 

Rất có thể html đến dữ liệu.d [1] có lỗi và IE không thể giải quyết.

10

Bạn có thể cảnh báo phản ứng của bạn trước khi gán cho nó html()

HOẶC

Bạn có thể sử dụng innerHTML tài sản thay vì html() của jquery (mặc dù đó là giống nhau)

Và bạn có thể muốn kiểm tra this liên kết

+3

+1 cho liên kết. làm việc trong trường hợp của tôi cho vấn đề với IE8 (vấn đề trở thành đánh dấu xấu!). nó nói: _Trong IE nó chỉ ra rằng thuộc tính jQuery .html() sẽ không thay thế nội dung của phần tử được so khớp đầu tiên trừ khi HTML mới là valid_ – javigzz

0

Chỉ cần cảm giác ruột, nhưng bạn có chắc chắn rằng bạn nhập if-block không? Tôi chỉ hỏi đã vấp vào đúng vs "true" một vài lần bản thân mình ...

Hãy thử:

success: function(data) { 
    alert('outside of if'); 
    if (data.d[0] == "true") { 
     alert(data.d[1]); 
     $("#dvProudctInstruction").html(data.d[1]); 
    } 
} 

Có thể không có bất cứ điều gì, nhưng ít nhất bạn sẽ loại bỏ khả năng mà bạn muốn chỉ đơn giản là không bao giờ chạy dòng mã bạn đã đánh dấu.

8

Có vẻ như IE8 gặp sự cố khi chèn chuỗi văn bản dài bằng html của jQuery(), làm cho nội dung của div hoàn toàn trống. Chỉ cần thử nó với cả một chuỗi rất dài và một chỉ chứa 'blah', và điều đó tạo ra tất cả sự khác biệt.

Vì vậy, nếu bạn đang mong đợi một số lượng lớn văn bản (như 2k + ký tự), hãy truy cập vào innerHTML gốc. Không thực hiện thêm bất kỳ nghiên cứu nào, vì vậy tôi không biết độ dài tối đa của chuỗi được chuyển qua html() trong IE8 là bao nhiêu.

+2

Đây là bang, chính xác. Lỗi lạ. –

+0

Điều này đã cứu mạng tôi, cảm ơn !! – user2968356

0

tôi đã trả lời vấn đề này trên link bạn chỉ cần thay đổi mã của bạn để được như thế này

$("#dvProudctInstruction").html(data.d[1].toString()); 
0

Tôi biết đó là chút của một câu trả lời muộn; nhưng bạn cũng có thể sửa nó bằng khối try/catch. Đôi khi bạn có thể không có toàn quyền kiểm soát nội dung.

Bằng cách này, bạn giữ mã ban đầu làm việc cho các trình duyệt mới, trong khi bắt chạy chạy innerHTML cho IE8.

try { 
    //new browsers 
    $('#dvProudctInstruction').html(data.d[1]); 
} catch (e) { 
    //IE8 
    $('#dvProudctInstruction').innerHTML = data.d[1]; 
} 

Hy vọng điều này sẽ giúp ai đó!

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