2008-10-25 42 views
20

Tôi đang làm việc trên một trang web đang sử dụng jQuery. Tôi có một cuộc gọi Ajax nhận dữ liệu từ máy chủ và cập nhật một div. Bên trong dữ liệu đó có một hàm jQuery, nhưng hàm này không được gọi sau khi dữ liệu được nạp vào trang. Tôi có các tệp js thích hợp được bao gồm trong trang.Gọi hàm jQuery bên trong html trả về từ cuộc gọi AJAX

Đây là những gì được trả về từ các cuộc gọi Ajax và đặt vào một div:

<script type="text/javascript"> 
    $(function() { 
     $('input').myFunction('param');    
    }); 
</script> 
<p> other html </p> 

Làm thế nào để javascript trở lại chạy sau khi html được chèn vào trang?

(Tôi đang sử dụng Rails với các plugin jRails)

Trả lời

26

Nếu bạn muốn đánh giá tag JavaScript, với nội dung html, bạn nên thiết lập các tùy chọn datatype của cuộc gọi ajax để "html":

$.ajax({ 
    type: "GET", 
    url: "yourPage.htm", 
    dataType: "html" 
}); 

Hoặc datatype "kịch bản", nếu bạn muốn tải và thực thi một file .js:

$.ajax({ 
    type: "GET", 
    url: "test.js", 
    dataType: "script" 
}); 

biết thêm ở đây: Ajax/jQuery.ajax

7

Tôi đã có một vấn đề tương tự, nơi tôi muốn thêm bộ chọn ngày jquery ít vào một vài lĩnh vực tôi đã lấy thông qua ajax. đây là những gì tôi đã làm để có được xung quanh nó ... chỉ cần nhanh chóng và bẩn thỉu. Thay vì trả lại toàn bộ khối này từ cuộc gọi ajax của tôi:

<script type="text/javascript"> 
    $(function() { 
     $('input').myFunction('param');       
    }); 
</script> 
<p> other html </p> 

tôi sẽ trở lại đây (chú ý tạo thành | x | separator)

$(function() { 
     $('input').myFunction('param');       
    }); 

|x| 

<p> other html </p> 

Sau đó, khi tôi nhận được dữ liệu trở lại thông qua ajax, tôi chia giá trị trả thành 2 phần: javascript để được thực thi, và html để hiển thị:

r = returnvalfromajax.split("|x|");  
document.getElementById('whatever').innerHTML = r[1]; 
eval(r[0]); 
-7

bạn đã thử phương pháp Sys.WebForms.PageRequestManager.add_endRequest?

$(document).ready(function() 
    { 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequestHandler);   
    } 
    ); 
    function endRequestHandler(sender, args) 
    { 
     // whatever 
    } 
+5

Anh ấy hiện không sử dụng ASP.NET! –

-1

Vâng, bạn có thể sử dụng jQuery load() chức năng: http://docs.jquery.com/Ajax/load#urldatacallback Là một callback bạn có thể xác định chức năng mà sẽ được thực hiện sau khi tải nội dung mới dụ:

$ ("# thức ăn"). tải ("new_content.html" ,, doSomething());

và trong new_content.html bạn có thể định nghĩa function doSomething() ...

-1

cho ajax.net giải pháp endRequestHandler(sender, args) hoạt động tốt mặc dù

1

Thay đổi

<script type="text/javascript"> 
... 
</script> 

Để:

<script> 
... 
</script> 

Đã khắc phục sự cố cho tôi.

+0

Nó không hoạt động cho tôi :( – joseantgv

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