2011-04-05 31 views
5

Vì vậy, tôi đang tải một số dữ liệu từ một hành động MVC3 trả về Json, chứa một số tham số và nội dung dưới dạng một chuỗi. Tôi thêm nội dung vào một số div. Trong khung nhìn từng phần, tôi có một sự kiện JQuery document.ready. Đối với một số lý do mà chức năng thực hiện trước khi nội dung được nối thêm và tất cả các bộ chọn mà tôi khai báo trong hàm sẵn sàng đều trống.

Có lý do logic nào cho điều này không? Tôi có đặt một thời gian chờ các bộ chọn xem các phần tử hay không. Nhưng thời gian chờ có thể rất không chính xác.

Mọi đề xuất?

Cảm ơn!

Ví dụ đang fiddle: http://jsfiddle.net/aKxy7/

Trả lời

0

tôi đã kết thúc mã hóa một phương pháp mà chờ đợi cho đến khi một thành phần được chọn trong HTML nạp qua ajax đã sẵn sàng.

+0

Tôi biết đây là câu trả lời cũ nhưng bạn có thể cung cấp đoạn mã không? –

2

Có vẻ như bạn đang mong đợi $(document).ready() bắn sau tất cả Tài sản được nạp. Đó không phải là cách hoạt động của $(document).ready(). Nó được kích hoạt khi DOM kết xuất xong. Chỉ có bấy nhiêu thôi. Có vẻ như bạn muốn sử dụng $(window).load(), trong đó sẽ đợi cho đến khi tất cả nội dung được tải.

+1

$ (cửa sổ) .load() sẽ không kích hoạt các yêu cầu AJAX vì tôi không thực hiện gửi lại toàn trang. –

+0

Gợi ý: $ (cửa sổ) .load() không được dùng nữa từ phiên bản 1.8. – robsch

0

$(document).ready() được gọi khi HTML! Nó đã nạp đầy. Điều này có nghĩa là nếu HTML của bạn tải một số javascript thực hiện thay đổi đối với DOM HTML, thì những cú pháp đó $(document).ready() sẽ được gọi trước đó.

Bạn nên chắc chắn rằng chức năng của bạn được gọi là cuối cùng hoặc sử dụng setTimeout mà các cuộc gọi cho đến khi các phần tử bạn cần đều được tải.

0

Trong hàm $. ($) Của bạn. Bạn có thể gọi cho jQuery là $ .ajax hoặc $ .getJSON để nhận câu trả lời từ máy chủ của bạn. Sau đó, bạn có thể tiêm phản ứng json nơi bạn muốn. Không có setTimeout cần

0

Trước hết,

var elementIWannaGet = $('html-content-div'); 

nên

var elementIWannaGet = $('#html-content-div'); 

Tuy nhiên, những gì bạn có thể được tốt hơn off làm được tách kịch bản từ nội dung, như dom đã được nạp ...

Cân nhắc thay đổi phản hồi cho điều này:

{ result: true, 
    data: { id: '1' }, 
    elementId: '#html-content-div', 
    content: '<div id="html-content-div">Html content! :D</div>' 
} 

Và sau đó thay đổi handler tải nội dung của bạn như sau:

function contentLoaded(response) { 
    if (response.result == true) 
     handleError(response); 

    // Get the container where the response.content will be rendered to. 
    var targetContainer = $('#target-container-id'); 

    // Append the content 
    targetContainer.append(response.content); 

    // Do something with your container 
    alert($(response.elementId).html().length); 
} 
Các vấn đề liên quan