2009-11-25 26 views
8

Tôi có một thẻ div được lấp đầy với tập lệnh thông qua cuộc gọi ajax, nhưng tập lệnh không thực thi.Tải các thẻ script thông qua AJAX

Có cách nào để khiến tập lệnh thực thi không?

+0

là có bất kỳ mã có sẵn liên quan đến câu hỏi này? – miku

+0

câu hỏi rất mơ hồ. mã và ví dụ xin vui lòng. – mauris

+0

- được chuyển vào phía máy khách thẻ div. –

Trả lời

11

Nếu bạn sử dụng jQuery .html phương pháp nó phân tích ra các thẻ script và evals nó:

$("div").html('<script type="text/javascript">alert("This should work")</script>'); 

Nếu jQuery không phải là một lựa chọn bạn có thể viết này mình sử dụng một trong hai (1) một biểu thức chính quy, hoặc (2) phân tích cú pháp cây DOM và tìm các thẻ tập lệnh. (# 2 là cách jQuery thực hiện)

+0

jQuery mặc dù cần phải được kích hoạt và nếu tôi bao gồm điều này trong tải trọng được gửi lại cho khách hàng nó sẽ không chạy như tập lệnh tải xuống ajax không bắt đầu. Ngoại lệ: Tôi có thể đặt thẻ trì hoãn trong đánh dấu tập lệnh và IE sẽ chạy nó, nhưng đó chỉ là x% người dùng. –

+0

@Caleb: Mã trong câu trả lời của bạn là gì? – Ashwin

+0

Đây cũng là lý do tại sao các thẻ tập lệnh trong các yêu cầu AJAX không kết thúc ở vị trí chúng trong html từ phản hồi. – Ikke

0

Nếu bạn đặt innerHtml của div, thẻ tập lệnh sẽ thực thi. Tôi đang sử dụng $ ("# divid"). Load() để tải các nội dung động và các thẻ script thực thi.

Hãy thử sử dụng JQuery nếu nó không hoạt động bằng javascript thuần túy.

+0

Đáng buồn là không phải như vậy. Tập lệnh trong tải trọng html của một tải trọng Ajax được gửi tới máy khách sẽ không được thực thi. –

3

Bạn nên tách riêng nội dung khỏi mã. Tải nội dung qua AJAX và mã bằng cách chèn các thẻ <script>. Nếu bạn đang sử dụng jQuery, hãy sử dụng $.getScript() để tải tập lệnh động.

2

Tôi đoán, bạn đang viết thẻ tập lệnh vào bên trongHTML trực tiếp

Điều này sẽ không hoạt động.

document.body.innerHTML+="<script>alert(1)</scr"+"ipt>"; 

bạn phải viết sử dụng chức năng DOM như

var tag = document.createElement("script"); 
tag.innerHTML="alert(1)"; 
document.body.appendChild(tag); //can be append to any object other than body 

hoặc tốt hơn sử dụng này jQuery

+0

Vấn đề là tập lệnh được bao gồm trong tải trọng Ajax và được gửi tới máy khách bên trong DIV. Tôi không thể có được kịch bản để bắt đầu một khi nó đến khách hàng để có một vấn đề gà và trứng. –

+0

Xin chào, trong trả về Ajax, loại kết quả nào? chỉ mã javascript? hoặc bao gồm thẻ tập lệnh? Nếu chỉ mã javascript, bạn có thể 'eval' hoặc nếu bao gồm thẻ tập lệnh, bạn có thể sử dụng ví dụ ở trên trong bài đăng của tôi và thay đổi' document.body' bằng thẻ div của bạn và thêm vào đó. – YOU

+0

và bạn có thể cập nhật bài đăng của mình với nhiều thông tin hơn, như trang web của bạn và giải thích thêm không? bởi vì mọi người sẽ nhận thấy và họ cũng sẽ tìm ra vấn đề hiện tại của bạn, rgds – YOU

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